首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何迭代一个列表,使它在一个迭代的第二个列表中交互?

我如何迭代一个列表,使它在一个迭代的第二个列表中交互?
EN

Stack Overflow用户
提问于 2017-09-29 17:46:43
回答 3查看 53关注 0票数 0

这就是我所拥有的:

代码语言:javascript
运行
复制
list1 = range(2, 11)
list2 = range(2, 11)
primes = []
primes.append(?)
? % ? == 0....
primes = set(primes)

使用理解,我如何让list1被迭代2-10,除以迭代的list2,结果没有零余数附加到素数?然后,我可以将列表转换为一个集合,以删除重复项。我看到一个函数也是可能的,我只是不能用我的大脑来思考如何写它?

期望的结果是。素数= 2,3,5,7

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-29 18:02:12

这里有一种紧凑的方法来完成您所要求的循环。但是,您的列表不应该包含1。

代码语言:javascript
运行
复制
>>> list1 = list(range(2,11))
>>> list2 = list(range(2,11))
>>> primes = [a for a in list1 if all((a % b) != 0 for b in list2 if a != b) ]
>>> primes
[2, 3, 5, 7]

结果没有重复,因为理解只是收集list1的元素。当然,有很多方法可以改进素数检测。这只是向您展示了如何将理解应用于您的算法。

票数 3
EN

Stack Overflow用户

发布于 2017-09-29 18:01:10

试试这个(按你想要的号码换10 )

代码语言:javascript
运行
复制
primes = []
for number in range(1,10):
    is_prime = True
    for div in range(2, number-1):
        if number % div == 0:
            is_prime = False
            break
    if is_prime:
        primes.append(number)

不过,要小心,这样做根本没有效率。一个小小的改进就是用int(sqrt(number))来改变int(sqrt(number))。但这是数学规则。如果你想要前1000000个素数,那是行不通的。如果您需要更多的话,您可能想检查更高级的方法来找到素数。

说明:首先使用1到10-1= 9之间的所有数字进行迭代。这个数字存储在变量" number“中。然后迭代其他可能的分隔符。如果每对数字和除法器的模数为0,那么它不是素数,您可以将它标记为非素数(is_prime = False),然后退出循环。在内部循环的末尾,检查布尔值is_prime,如果布尔值设置为True,则将其添加到列表中。

票数 0
EN

Stack Overflow用户

发布于 2017-09-29 18:11:53

这里有一种合理有效的方法,可以通过列表理解找到素数,尽管它不如我在评论中链接到的Robert的代码那么高效。

我们把2作为特例来处理,所以我们不需要考虑任何更高的偶数。我们只需要检查因子小于我们测试的数字的平方根。

代码语言:javascript
运行
复制
from math import floor, sqrt

primes = [2] + [i for i in range(3, 100, 2) 
    if all(i % j != 0 for j in range(3, 1 + floor(sqrt(i)), 2))]
print(primes)

输出

代码语言:javascript
运行
复制
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

这里有一个替代版本(效率较低),它迭代您的list1 (它实际上不是一个列表,它是一个range对象)。

代码语言:javascript
运行
复制
list1 = range(2, 100)
primes = [i for i in list1 if not [j for j in list1 if j*j <= i and i % j == 0]]
print(primes)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46494345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档