如何检查2D列表中的所有项目是否全部相同?

时间:2012-04-18 18:34:09

标签: python

我需要帮助检查二维列表中的所有项目是否相同(在这种情况下,我正在检查它们是否都等于一个)。

我创建了一个函数allOnes(L),用于检查一维数组中的所有项是否为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 个答案:

答案 0 :(得分:4)

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

要执行任何维度的数组,请使用itertools.chain将N维数组缩减为常规数组,然后将其提供给allOnes函数。 (感谢Lattyware)

答案 1 :(得分:3)

对于快速矩形阵列使用numpy。

import numpy
table= numpy.array([[1,1,1], [1,1,1], [1,1,1]])
print numpy.all( table == 1 )

答案 2 :(得分: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
>>> 

答案 3 :(得分: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