我想更好地理解列表解析是如何工作的。 我有以下函數返回true或false,如果一個數是素數(我發現某處的論壇,但不記得在哪裏):有條件的列表理解
import math
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
如果我運行:
[x for x in range(2, num) if is_prime(x)]
我得到在試圖將整個功能轉換到一個列表理解所期望的結果
[2, 3, 5, 7, 11, 13, 17, 19]
我想出了:
[x if not (x%2==0 and x > 2) else x for x in range (2, num)
for i in range(3, int(x**(1/2))+1, 2) if not (x%i==0)]
主要生產:
[10, 11, 13, 14, 16, 17, 19]
不知道我要去的地方錯了,希望得到一些幫助。事實上,我認爲在這種情況下使用函數會更好,但正如我所說的,我正在嘗試理解列表理解及其能力。
@Wright:剛剛返回奇數和排除2. OP也排除可被3整除的數字。 – Prune
我會說它太多以至於無法擠入列表理解。練習可以,但是當其他人閱讀時不要這樣做。 –
只爲咯咯我定時每個版本:函數'[x爲範圍內的x(2,數量),如果is_prime(x)]'版本是每循環** 9.01 s **; @Julien版本(稍作修改):**每循環12.8 s **和@Harshit Garg版本:**每循環44.4 s **。 –