0

やあみんな、二次元リストの偶数を数えるプログラムを作ろうとしています。これまでに作成したプログラムは、私が望むものを返していません。

def Evens(x):
    count = 0
    x = len(x)
    for a in range(x):
        if a%2 == 0:
            count = count + 1
    return count

Evens([[1,3],[1,9,7,1,3],[13]])4を返したいときにリストに対して2を返し続けます。すべてを試しましたが、正しく機能していないようです。

ありがとう

4

4 に答える 4

3

サブリストを実際に繰り返す必要があります。

def evens(l):
    count = 0
    for l2 in l:
        for i in l2:
            if i%2 == 0:
                count += 1
    return count

または、はるかに簡単なアプローチを取ることができます。

def evens(l):
    return sum(i%2==0 for l2 in l for i in l2)

2番目のアプローチでは、整数のコンテキストで、、を使用True == 1するFalse == 0ため、期待どおりの結果が得られます。

于 2013-02-11T08:05:42.773 に答える
3

発生している問題は、インデックスをチェックして、値ではなく偶数であるかどうかを確認していることです。サブリストもチェックインしていません。

より簡単な IMO は、これを行うことです。

import itertools
def evens(x):
    return sum(a % 2 == 0 for a in itertools.chain.from_iterable(x))
于 2013-02-11T08:04:26.347 に答える
2

すべてのサブリストを反復処理する必要があります。

In [34]: l = [[1,4,3],[12,0,7,10,3],[13]]

In [35]: sum(n%2 == 0 for sub in l for n in sub)
Out[35]: 4
于 2013-02-11T08:04:53.380 に答える
0

各サブリストの要素も反復処理する必要があります。

def count_evens(l):
    total = 0

    for l2 in l:
        for item in l2:
            if item % 2 == 0:
                total += 1

    return total

以前に行っていたのは、サブリストの数を反復処理することでした (つまり、要素[0, 1, 2, 3]を持つリストの場合)。4コードは機能していましたが、正しく機能していませんでした。

于 2013-02-11T08:04:36.930 に答える