给定一个列表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]
有什么方法可以让我的工作吗?
答案 0 :(得分:2)
因为这感觉像是一个家庭作业问题,我不会给出工作代码,而是一个策略。您希望确保仅保留原始列表的编号,或过滤掉非素数的数字。
稍微更正式,#34;对于列表中的每个号码,确定它是否为素数,如果是,则将其包含在新列表中#34;。
你的代码是90%,但你的内核(素性测试)不正确。测试素数的关键是确保每个可能的整数除数不均匀划分有问题的数字。
例如,如果测试6,可能的" 0余数"整数除数是
[1, 2, 3, 4, 5, 6]
第一个和最后一个数字(1和6)对于素数(6/1为6,6/6为1)并不意味着什么。那么,你要测试的可能除数列表现在是
[2, 3, 4, 5]
从这里开始,我认为您的代码中缺少的一个洞察力是对于一个数字是素数,所有其可能的除数不得产生偶数(即剩下的0)。
答案 1 :(得分:0)
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