簡體   English   中英

如何在列表中查找特定元素並將其組合到新列表中(Python3)

[英]How to find specific elements in a list and combine them into a new list (Python3)

首先,我是這個站點和編程的新手,所以如果我的代碼編寫水平很差或者我提出問題的方式是錯誤的,請指出正確的方向。

我已經用Python3編寫了一個程序,該程序使我能夠得到所有素數的列表,這些數小於等於選擇的給定數N。 例如,如果我的輸入是10,我的程序將給出以下結果:

>>>primes(10)
[2, 3, 5, 7]

現在,我正在嘗試編寫一個后續程序,該程序給定給定數字N的雙素數。因此,例如:如果N = 10,我知道有兩個雙素數[3,5]和[5,7] 。 我嘗試了以下方法:

def twinprimes(n):
    x = primes(n)
    ps = [] 
    for i in range(len(x)):
        if x[i]+2==x[i]:
        ps.append((x[i])
    return ps

因此,我試圖制作一個新的列表ps ,其中添加了twinprime對的所有第一個值,以便可以找到len(ps)來查找twinprimes的總值。

現在我知道我的代碼有很多錯誤。 我只是不知道如何使它工作。

您正在嘗試測試素數是否等於自身加2:

if x[i]+2==x[i]:

沒有數字可以等於其自身加上一個非零的其他數字,因此測試永遠不會通過。

您要測試當前質數是否比列表中的下一個數小2:

if x[i] == x[i + 1] - 2:  # two adjacent primes differ by 2

但是,這會遇到i + 1不是x的有效索引的問題,因為您循環到(但不包括) len(x) len(x) + 1將引發IndexError 但是無論如何您都不需要測試最后一個質數,因此可以使用以下方法:

for i in range(len(x) - 1):
    if x[i]  == x[i + 1] - 2:
        ps.append((x[i], x[i + 1]))

這增加了兩個素數。

產生此列表的更多Python方式; 例如,將質數與zip()配對,並使用列表推導:

def twinprimes(n):
    x = primes(n)
    return [(a, b) for a, b in zip(x, x[1:]) if a == b - 2]

暫無
暫無

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

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