删除列表中不是相对素数的所有元素

时间:2015-09-15 14:56:56

标签: python

我在python中有一个列表m,我想删除m中所有以前所有元素都不是相对素数的元素。因此,如果m=[2,3,4]我希望输出为[2,3]

我尝试迭代m的值,但它不起作用,因为m的大小发生了变化,然后索引值超出了范围。

1 个答案:

答案 0 :(得分:7)

您可以在列表理解中使用enumerateany,并使用fractions.gcd函数获取每对的gcd:

>>> from fractions import gcd
>>> [j for i,j in enumerate(m) if not any(gcd(j,t)!=1 for t in m[:i])]
[3, 100, 7, 11, 17]

同样正如@mgilson在评论中提到的更为有效,而不是any中的简单切片,您可以使用itertools.islice函数。