Python 从列表中获取素数
给定一个列表Python 从列表中获取素数,python,python-3.x,Python,Python 3.x,给定一个列表lst=[121,4,37,441,7,16],我想从中删除所有重复的数字,生成一个新字符串,即lst=[37,7](原始字符串的素数) 到目前为止,我只成功地发布了以下代码: def func(lst,x): y = [] for i in lst: for x in range (1, i): if (i % x) == 0 : y.append(i) return y print(
lst=[121,4,37,441,7,16]
,我想从中删除所有重复的数字,生成一个新字符串,即lst=[37,7]
(原始字符串的素数)
到目前为止,我只成功地发布了以下代码:
def func(lst,x):
y = []
for i in lst:
for x in range (1, i):
if (i % x) == 0 :
y.append(i)
return y
print(func(lst,3))
我得到的不是lst=[37,7]
,而是一个奇怪的列表:
[121, 121, 4, 4, 37, 441, 441, 441, 441, 441, 441, 441, 441, 7, 16, 16, 16, 16]
有什么方法可以让这项工作顺利进行吗?因为这感觉像是一个家庭作业问题,我不会给出工作代码,而是一个策略。您希望确保只保留原始列表中的数字,或者过滤掉非素数的数字 稍微正式一点,“对于列表中的每个数字,确定它是否为素数,如果是,则将其包含在新列表中” 您的代码有90%,但您的内核(素性测试)不正确。测试素性的关键是确保每个可能的整数除数不会均匀地除以所讨论的数字 例如,如果测试6,则可能的“0余数”整数除数列表为
[1, 2, 3, 4, 5, 6]
第一个和最后一个数字(1和6)就素数而言没有任何意义(6/1是6,6/6是1)。那么,您要测试的可能除数列表现在是
[2, 3, 4, 5]
从这里开始,我认为您在代码中缺少的一个见解是,对于一个素数,其所有可能的除数都不能产生偶数(即0的余数)。
121%1==0
当然是正确的,正如121%11==0
一样。您的代码将每个数字重复k
次,其中k
是正确的除数(包括1
)。既然这好像是家庭作业,我就让你猜怎么修。我不明白?你想删除所有非素数吗?谢谢约翰·科尔曼,我当然会的!太棒了,谢谢你,亨特克。反正我也不想解决这个问题,否则我就不学了!我会在这里张贴正确的代码,一旦我找到它!只有代码的答案没有太大帮助。请解释它为什么有效。
from math import sqrt
def func(n)
list1=[]
list2=[]
for z in (all(i % x for x in range(2,int(sqrt(i)+1))) for i in n):
list1.append(z)
for i,j in enumerate(list1):
if j == True:
list2.append(n[i])
return list2