python - 没有过滤器的列表理解

标签 python python-3.x algorithm list list-comprehension

最近在网上看到这段代码:

nonprime = [j for i in range(2, 8) for j in range(i*2, 50, i)]

上面的代码似乎在计算所有小于 50 的非素数,但我不明白其中的逻辑。 我研究了 python 中的列表理解并观察到它使用过滤器根据条件进行过滤, 但我无法理解两个 for 循环是如何计算这些非素数的。

最佳答案

这个列表理解与这两个嵌套的 for 循环的作用相同:

nonprime=[]
for i in range(2,8):
    for j in range(i*2, 50,i):
        nonprime.append(j)

因此在外层循环中,i 在每次迭代中只增加 1,并取值 i=2,3,4,5,6,7。 j 上的内部 for 循环取决于外部循环。它从 2*i 开始,j 在每次迭代中增加 i

所以对于 ì=2,内部循环从 j=4 开始并且 j 取值 j=4 ,6,8,...,48。 然后 ì 在外循环中增加到 3 并且 j 取值 6,9,12,...48

请注意 nonprime 列表不会创建唯一元素,因为例如 6 出现不止一次。

正如 Bakuriu 正确指出的那样,此方法利用了 Sieve of Eratosthenes

关于python - 没有过滤器的列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50305446/

相关文章:

python - 如何从 Python 64 位切换到 32 位?

c++ - 自定义排序算法c++

c++ - 排序/操作/排序的最佳替代算法

algorithm - 如何在生成和处理 python 排列时避免内存错误?

python - __getattr__中调用__getattribute__会无限大吗?

python - 如何使用 Beautiful soup 在 <span> 标签中搜索特定的 "class=id"类型属性?

python - 仅将一个键列复制到合并的 DataFrame 中

python - 内部列表每个位置的字符频率

python - 查找字典列表中的最大月份数

python - 类函数输出正确但方法错误