gpt4 book ai didi

python - 如何在 python 中使用另一个列表上的一个列表运行模条件

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:07 25 4
gpt4 key购买 nike

我只使用 python 大约 2 周,需要一些帮助。我正在尝试在两个不同大小的列表之间使用 mod (%) 函数。

n = 23 #user input, starting point for the code
listp = [2, 3, 5, 7, 11, 13]
listr = list(range((n-1)**2, n**2+1, 2))
listb = list(listr) #I need to remove items from listr but if i do, it
#crashes so I decided to copy it to listb in order to manipulate it

for k in listr:
for i in listp[1:]:
if k%i == 0:
if k in listb:
listb.remove(k)

这行得通,但速度很慢,我想直接操作 listr,我可以单独操作:

listr = [k for k in listr if i%listp[1] !=0]
listr = [k for k in listr if i%listp[2] !=0]

最重要的是,我想在 listr 中的每个 k 元素上使用 % 函数,使用 listp 中的每个 i 元素,并且只保留 listr 中 !=0 的那些元素;我试过使用 numpy 和数组,但这也无济于事

最佳答案

您可以从找到任何 此类值的那一刻起停止。所以替换:

for k in listr:
<b>for i in listp[1:]:
if k%i == 0:</b>
if k in listb:
listb.remove(k)

与:

for k in listr:
<b>if any(k%i == 0 for i in listp[1:]):</b>
listb.remove(k)

这已经产生了一些加速。但是 list.remove 很慢,它在 O(n) 中工作。所以现在我们可以把它变成列表理解:

listr = [k for k in listr <b>if not any(k%i == 0 for i in listp[1:])</b>]

因此,如果不满足这样的取模条件,我们将数字添加到新的 listr 列表中。 not any(p(x) for x in X)可以重写为all(not p(x) for x in X),所以我们可以在这里应用它:

listr = [k for k in listr if <b>all(k%i != 0</b> for i in listp[1:])]

此外,我们还可以通过制作列表 listp1 来节省一些周期:

<b>listp1 = listp[1:]</b>
listr = [k for k in listr if all(k%i != 0 for i in <b>listp1</b>)]

因为现在我们只构建一个新列表一次。最后,我们可以删除 != 0,因为整数的真实性是 True 当且仅当值不等于 0 时:

listp1 = listp[1:]
listr = [k for k in listr if all(k%i for i in listp1)]

请注意,有比 Eratosthenes 筛法 更快的方法。

关于python - 如何在 python 中使用另一个列表上的一个列表运行模条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47353269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com