首页 > 解决方案 > 列表理解而不是嵌套的 for 循环和 ifs

问题描述

我想编写一个等效于嵌套 for 循环和条件的列表理解

我试着写

lst.append(i,j for i in range(2,num) for j in range(2,i) if num%i==0 if i%j!=0)

这给了我错误:

生成器表达式必须带括号

我也试过

lst=[(i,j) for i in range(2,num) for j in range(2,i) if num%i==0 if i%j!=0] 

这不会引发错误,但我没有得到想要的结果

num=int(input("Enter a number:"))
lst=[]
for i in range(2,num):
    if num%i!=0:
        continue
    else:
        isprime=False
        for j in range(2,i):
            if i%j==0:
                isprime=True
                break
        if not isprime:
            lst.append(i)
for ele in lst:
    print(ele)

该程序将给出输入数字的主要因素

标签: pythonpython-3.x

解决方案


如果您希望准确复制那里的内容,可以尝试以下操作:

lst = [i for i in range(2, num) if num % i == 0 and all(i % j for j in range(2, i))]

虽然它没有那么有效,因为它缺乏打破的能力。

如果您希望通过列表理解来查找所有素数,那么这不是一个坏方法:

lst = [x for x in range(2, num) if all(x % y != 0 for y in range(2, int(x ** 0.5) + 1))]

推荐阅读