3

2次元リストのすべての項目が同じであるかどうかを確認するのに助けが必要です(この場合、それらがすべて1に等しいかどうかを確認しています)。

allOnes(L)すべての項目が1D配列の1であるかどうかをチェックする関数を作成しました。私は次のようにall()関数を使用しました:

def allOnes(L):
    """Tests to see if the numbers in the list L are all 1's
    """
    return all(x == 1 for x in L)

次に、2Dリストのすべてのアイテムがすべて1であるかどうかを確認する必要があります。関数allOnes2dが次のようなリストをチェックするときにTrueを返すようにしたいと思います[[1,1,1], [1,1,1], [1,1,1]]。これは使用して可能all()ですか?

4

4 に答える 4

4
def allOnes2d(L):
    return all(allOnes(a) for a in L)

また、任意の次元の配列を実行するには、itertools.chainを使用してN次元配列を通常の配列に縮小し、それをallOnes関数に渡します。(Lattywareに感謝します)

于 2012-04-18T18:39:34.230 に答える
3

高速な長方形配列の場合は、numpyを使用します。

import numpy
table= numpy.array([[1,1,1], [1,1,1], [1,1,1]])
print numpy.all( table == 1 )
于 2012-04-18T18:43:29.630 に答える
1

と定義された関数を使用all()することはそれを行うための良い方法ですが、この代替案を調べることもできます

>>> from itertools import chain
>>> sum(1 for e in chain(*[[1,1,1], [1,1,1], [1,1,1]]) if e!= 1)
0

allOnesまたは、リストのラップを解除した後に電話をかけることもできますitertools.chain

>>> allOnes(chain(*[[1,1,1], [1,1,1], [1,1,1]]))
True
>>> 
于 2012-04-18T18:51:20.547 に答える
1

私はこの種の再帰が好きです:

from collections import Iterable
def allOnes(I):
    if isinstance(I, Iterable):
        return all(allOnes(i) for i in I)
    else:
        return I == 1

例:

>>> L = [[1,1,1], (1,1,1), 1]
>>> allOnes(L)
True
>>> L = [[1,1,1], (1,0,1), 1]
>>> allOnes(L)
False
于 2012-04-18T19:31:02.897 に答える