如何在列表中查找特定元素并将它们组合成一个新列表 (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)
来找到 twinprime 的总值。
现在我知道我的代码有很多错误。我只是不知道如何让它发挥作用。
您正在尝试测试一个质数是否等于其自身加 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]))
这两个素数相加。
有更多生成此列表的 pythonic 方法;例如,将质数与 zip()
配对,并使用列表理解:
def twinprimes(n):
x = primes(n)
return [(a, b) for a, b in zip(x, x[1:]) if a == b - 2]
首先,我是这个网站和编程的新手,所以如果我的代码编写水平不好或者我问问题的方式有误,请指出正确的方向。
我在 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)
来找到 twinprime 的总值。
现在我知道我的代码有很多错误。我只是不知道如何让它发挥作用。
您正在尝试测试一个质数是否等于其自身加 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]))
这两个素数相加。
有更多生成此列表的 pythonic 方法;例如,将质数与 zip()
配对,并使用列表理解:
def twinprimes(n):
x = primes(n)
return [(a, b) for a, b in zip(x, x[1:]) if a == b - 2]