-2

リスト内の数値がリスト内の前の数値 (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]

4

3 に答える 3

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]
于 2013-05-17T15:17:23.580 に答える
0

興味深い質問..これを簡単にするためのクールな数学的トリックがおそらくありますが、見逃していました..

n 個すべてを返すイテレータを使用しitertoolsて、数値の 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]
于 2013-05-17T16:57:09.700 に答える