从列表中获取素数

时间:2017-10-16 15:37:51

标签: 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(func(lst,3))

而不是获得lst = [37,7],我得到了这个奇怪的列表:

[121, 121, 4, 4, 37, 441, 441, 441, 441, 441, 441, 441, 441, 7, 16, 16, 16, 16]

有什么方法可以让我的工作吗?

2 个答案:

答案 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