我试图找到1到100之间的素数。
我知道必须有一百万种方法来实现这一点,但我写了几行,可能相当愚蠢。
pnumber = []
for x in range(2, 101):
for i in range(2, x):
if all(x % i):
pnumber.append(x)
print(pnumber)
这不起作用,但如果我尝试使用此代码,则可以正常工作。
pnumber = [x for x in range(2, 101) if all(x % i for i in range(2, x))]
print(pnumber)
第一次尝试有什么问题?写第二次尝试不是一种愚蠢的方式吗?
答案 0 :(得分:2)
你的第一次尝试应该是:
pnumber = []
for x in range(2, 101):
if all(x % i for i in range(2, x)):
pnumber.append(x)
print(pnumber)
你的第二次尝试只是第一次尝试的单行版本,速度基本相同,但更短,称为列表理解。如果比较这两种方法,你会看到相似之处。
为了更好地理解第二种方法,可以考虑代数中的集合表示法:
# In algerba:
evens = {x : x mod 2 = 0}
# In python (you need a finite set of numbers for x):
evens = [x for x in range(2,10) if x%2==0]
# In algerba:
primes = {x : for any 1<y<x, x mod y =/= 0}
# In python (you need a finite set of numbers for x):
primes = [x for x in range(2, 101) if all(x % y != 0 for y in range(2, x))]
答案 1 :(得分:2)
您的代码片段不等效,循环的等价物(不使用任何生成器或理解表达式)将是:
pnumber = []
for x in range(2, 101):
for i in range(2, x):
if x % i == 0:
break
else:
pnumber.append(x)
print(pnumber)