所以我想查看列表中的数字是否可以被列表中的前一个数字整除(除了1),如果是,我想将该数字替换为0有人可以帮忙吗?我正试图自己做一个'Eratosthenes的筛子'算法!
所以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]
答案 0 :(得分:3)
试试这个
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]
答案 1 :(得分:1)
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或数字,我们将其附加到结果列表中。
答案 2 :(得分: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]