簡體   English   中英

Python-從素數列表中刪除包含偶數的素數

[英]Python - Removing primes that contain an even number from a list of primes

我想編寫一個程序,從素數列表中刪除所有包含偶數的素數。

誰能解釋為什么如果限制為200,則此代碼返回正確的結果,但是如果限制為300,則返回錯誤?

def odd_primes(limit):
    r = list(gen_primes(limit))
    for i in r[:]:
        for j in str(i):
            if int(j)%2==0:
                r.remove(i)
return r

其中gen_primes(limit)是一個生成器,它返回limit之下的所有素數。

如果限制= 200,則返回:

[3, 5, 7, 11, 13, 17, 19, 31, 37, 53, 59, 71, 73, 79, 97, 113, 131, 137, 139, 151, 157, 173, 179, 191, 193, 197, 199]

但是如果限制為300,則會出現此錯誤:

line 19, in odd_primes
r.remove(i)
ValueError: list.remove(x): x not in list

為什么會這樣呢? 我該如何糾正呢?

如果您的代碼包含多個偶數位,則它可能會多次刪除同一元素。 第一個這樣的素數是223,這就是為什么當limit為300而不是200時代碼失敗的原因。

這是令人反感的代碼:

for j in str(i):
    if int(j)%2==0:
        r.remove(i)

相反,只需移除一次灌注即可。 例如:

for j in str(i):
    if int(j)%2==0:
        r.remove(i)
        break

或更時尚:

if any(int(j)%2 == 0 for j in str(i)):
    r.remove(i)

如果您的質數有兩個偶數,則您的例程會嘗試將其刪除兩次。 我會做:

def odd_primes(limit):
    r = list(gen_primes(limit))
    for i in r[:]:
        for j in str(i):
            if j in '02468':
                r.remove(i)
                break
    return r

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM