[英]Is there any way to condense a for-else loop in Python?
我編寫了一段代碼,最多輸出10001st個質數。 它目前占用4行代碼,並且想知道我是否可以進一步壓縮它? 這里是;
for i in range(3,104744,2):
for x in range(3,int(i/2),2):
if i % x == 0 and i != x: break
else: print(i)
據我所知,冷凝代碼太多,通常不是一件好事,但不知道是否有可能。
謝謝。
您可以使用列表推導和any
列表推導解決方案:
>>> [p for p in range(2, 100) if not any (p % d == 0 for d in range(2, int(p**0.5) + 1))]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
它使用除數不能大於其除數的平方根的事實。
似乎工作正常:
>>> len([p for p in range(2, 104744) if not any (p % d == 0 for d in range(2,int(p**0.5)+1))])
10001
清單理解
>>> r=range(2,100)
>>> [p for p in r if [p%d for d in r].count(0)<2]
[2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97 ]
試試這個:
for i in range(3,100,2):
if all( i%x for x in range(3, i//2, 2) ):
print(i)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.