【发布时间】:2018-05-12 10:54:52
【问题描述】:
最近在网上偶然发现了这段代码:
nonprime = [j for i in range(2, 8) for j in range(i*2, 50, i)]
上面的代码似乎在计算所有低于 50 的非素数,但我没有得到逻辑。 我研究了python中的列表理解,并观察到它使用过滤器根据条件进行过滤, 但我无法理解两个 for 循环是如何计算这些非素数的。
【问题讨论】:
-
这只是两个嵌套循环。没有过滤。它的工作原理可能与 python 无关,但它是一些聪明的数字东西——我很肯定它对更大的数字停止工作。
-
@deets,你说得对,这是一个“聪明的数字”(见the proof)。但由于它已在数学上得到证明,它确实适用于更大的数字,尽管效率低下。
-
确实是的.. 许多解决方案很有帮助,而且很难选择一个。非常感谢大家的详细解释。
标签: python python-3.x algorithm list list-comprehension