3

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

我做了一个函数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

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 回答