我需要帮助检查二维列表中的所有项目是否相同(在这种情况下,我正在检查它们是否都等于一个)。
我创建了一个函数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()
吗?
答案 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