Skip to main content
 首页 » 编程设计

python之我可以在列表理解中形成列表时使用列表吗

2025年05月04日13oomusou

例如下面的代码

primeList = [] 
for val in range(2, num): 
    if not any(val % i == 0 for i in primeList): 
        primeList.append(val) 

我怎样才能将这段确切的代码转化为列表推导式?

请您参考如下方法:

不,你不能,因为在理解完成迭代之前,列表不作为 Python 对象存在。您不能引用不存在的对象。老实说,我只想将其保留为 for 循环 - 列表推导并不是替换所有列表构造循环的 Elixir 。

但是...您可能会变得棘手并使用仅按需评估的生成器。将其与列表的 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)) 

公平警告:据我所知,extend() 在生成元素时将元素添加到列表中的事实不是规范的一部分,因此这段代码是否有效可能是依赖于实现。但我在 Python 2.7 和 3.4 中对其进行了测试,每次都得到一个素数列表。