2017-10-16 169 views
1

给定一个列表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

'121%1 == 0'当然是真的,就像'121%11 == 0'一样。你的代码重复每个数字'K'次,其中'K'是正确的除数(包括'1')的数量。由于这似乎是功课,我会让你拼出如何修复它。 –

+1

我没有得到?你想删除所有非素数? –

+0

谢谢John Coleman,我肯定会的! – Marujo92

回答

2

由于这感觉就像一个家庭作业问题,我不会给工作代码,而是一个策略。您希望确保只保留原始列表的编号,或者过滤掉不是素数的编号。

稍微更正式地说,“对于列表中的每个数字,确定它是否为素数,如果是,则将其包含在新列表中”。

你的代码是90%,但你的内核(素性测试)是不正确的。测试素数的关键是确保每个可能的整数除数而不是均匀地划分有问题的数字。

例如,如果测试6,可能的“0余数”整数除数名单是

[1, 2, 3, 4, 5, 6] 

的第一和最后一个号码(1,6),不就意味着什么作为素性(6/1是6,并且6/6是1)。所以,你可能除数测试的名单现在

[2, 3, 4, 5] 

从这里,我想你在你的代码所缺少的观点是:的数量是素数,其所有可能的除数的必须不产生偶数(即0的余数)

+2

太棒了,谢谢你hunteke。无论如何不想要解决方案,否则我不学!一旦找到它,我会在这里发布正确的代码! – Marujo92