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

3

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

我创建了一个名为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)

现在我需要检查一个二维列表中的所有项是否都是1。当检查像这样的列表时,我希望函数allOnes2d返回True:[[1,1,1], [1,1,1], [1,1,1]]。使用all()函数可以实现吗?

4个回答

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

如果要创建任意维度的数组,请使用itertools.chain将N维数组减少为常规数组,然后将其提供给您的allOnes函数。(感谢Lattyware)


иҝҷйҮҢдҪҝз”Ёitertools.chainжҜ”еҲ—иЎЁжҺЁеҜјејҸжӣҙеҘҪзҡ„йҖүжӢ©гҖӮ - Gareth Latty
啊,是的,那更加恰当。我会修改我的回答。 - jimw

3

对于快速的矩形数组,请使用numpy。

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

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

或者您可以在通过 itertools.chain 展开列表后调用 allOnes

>>> allOnes(chain(*[[1,1,1], [1,1,1], [1,1,1]]))
True
>>> 

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接