所以我想看看列表中的数字是否可以被列表中的前一个数字整除(除了 1),如果是这样,我想用 0 替换那个数字有人可以帮忙吗?我正在尝试自己制作“埃拉托色尼筛”算法!
所以L1=[1,2,3,4,5,6,7,8,9,10]
for i in range(len(L1)):
for j in range(len(L1)):
if L1[i]%L1[j]<>0:
L1[i]= 0
不L1
应该是:[1,2,3,0,5,0,7,0,0,0]
尝试这个
L1 = [2, 3, 4, 5, 6, 7, 8, 9]
for i in range(len(L1)):
for j in range(i):
if L1[j] not in (0, 1) and L1[i] % L1[j] == 0:
L1[i] = 0
break
>>> print L1
[2, 3, 0, 5, 0, 7, 0, 0]
def test(number, lst):
for i in lst:
if i not in (0, 1) and number % i == 0:
return 0
return number
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = []
for i in range(len(data)):
result.append(test(data[i], data[0:i]))
# Instead of the result = [] and a for-cycle, it is possible to use list-comprehension.
# Thanks to dansalmo for the suggestion
result = [test(data[i], data[0:i]) for i in range(len(data))]
这工作正常。它可能不是最短或最有效的代码,但我认为它很清楚。我们对数据的每个元素和数据的每个对应部分调用一个函数测试,我们需要检查除数。该函数返回正确的值:0 或数字,我们将其附加到结果列表中。
有趣的问题.. 可能有一些很酷的数学技巧可以让这更容易,但无论如何..
使用itertools
我们可以获得一个返回所有 n 的迭代器,选择 2 个数字组合,然后根据您的标准测试每对数字并使用ifilter
以获取我们想要删除的数字:
from itertools import ifilter, combinations
nums = [1,2,3,4,5,6,7,8,9,10]
def mod(x):
if 1 in x: return False
if not max(x)%min(x): return True
seive = [max(x) for x in ifilter(mod,combinations(nums,2))]
这将为您提供要设置为零的数字。一个你得到那些你可以将它们设置为零的:
for num in nums:
if num in seive:
nums[nums.index(num)] = 0
或者,您可以获取剩余数字的列表:
primes = [x for x in nums if x not in seive]