[英]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.