Ahs*_*que 1 python list-comprehension
例如,下面的代码
primeList = []
for val in range(2, num):
if not any(val % i == 0 for i in primeList):
primeList.append(val)
Run Code Online (Sandbox Code Playgroud)
如何将这段确切的代码转换为列表理解?
不,你不能,因为在理解完成迭代之前,列表不作为Python对象存在.您不能引用不存在的对象.老实说,我只是把它留作for循环 - 列表理解不是替换所有列表构造循环的神奇子弹.
但是......你可能会变得棘手并使用一个只按需评估的发电机.将它与extend()列表的方法相结合,列表的方法在获取它们时将元素添加到列表中(无论如何,在我的测试中),您可以在扩展时使用列表的当前内容.
# make sure to set `num`
plist = []
plist.extend(c for c in range(2, num) if not any(c % p == 0 for p in plist))
Run Code Online (Sandbox Code Playgroud)
公平警告:据我所知,在extend()生成它们时向列表添加元素的事实不是规范的一部分,因此这段代码是否有效可能与实现有关.但是我在Python 2.7和3.4中对它进行了测试,并且每次都得到了一个素数列表.