如何在Python列表推导式中实现带else的for循环?
用列表推导式实现带for-else逻辑的素数筛选
原代码的核心逻辑是:当内层循环未触发break(即没有找到能整除i的j)时,将i判定为素数并加入列表。在列表推导式中,我们可以用all()函数等价替代这个for-else逻辑——all(条件)会在所有元素都满足条件时返回True,正好对应内层循环正常结束(无break)的场景。
改写后的代码如下:
def primeNumber(self, A): return [i for i in range(2, A+1) if all(i % j != 0 for j in range(2, int(i/2)+1))]
逻辑说明
- 外层遍历
range(2, A+1)的每个i,对应原代码的外层for循环。 - 条件部分
all(i % j != 0 for j in range(2, int(i/2)+1)):遍历所有可能的因数j,只有当所有j都不能整除i时,才会保留i,这完全等价于原代码中内层for循环执行完后进入else块的逻辑。
可选优化
判断素数时,只需要检查到sqrt(i)就足够(比i/2效率更高),可以把内层range改为range(2, int(i**0.5)+1),优化后代码:
def primeNumber(self, A): return [i for i in range(2, A+1) if all(i % j != 0 for j in range(2, int(i**0.5)+1))]
内容的提问来源于stack exchange,提问作者akshay patil
相关产品推荐
相关产品推荐

