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

Jac*_*cob 1 python

m在python中有一个列表,我想删除m中不是所有先前元素的相对素数的所有元素.所以,如果m=[2,3,4]我想要输出[2,3].

我尝试迭代值m,但它不起作用,因为m更改的大小,然后索引值超出范围.

Kas*_*mvd 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]
Run Code Online (Sandbox Code Playgroud)

另外正如@mgilson在评论中提到的更有效的方式而不是简单的切片,any你可以使用itertools.islice函数.