在Python中检查二维数组中的所有元素是不是等于1 [重复]
Posted
技术标签:
【中文标题】在Python中检查二维数组中的所有元素是不是等于1 [重复]【英文标题】:Check if all elements in a 2d array are equal to 1 in Python [duplicate]在Python中检查二维数组中的所有元素是否等于1 [重复] 【发布时间】:2017-02-24 18:06:15 【问题描述】:除了遍历嵌套循环并检查每个值是否等于 1 之外,最常用的 Python 方法是什么?
【问题讨论】:
【参考方案1】:使用 itertoools.chain 迭代“扁平化”列表
all(x == 1 for x in itertools.chain(*my_list))
【讨论】:
【参考方案2】:如果您使用numpy
,您可以使用它的每个元素相等性检查,然后调用结果数组all
方法来检查所有 元素是否满足条件:
>>> import numpy as np
>>> c = np.array([[1,2], [3,4]])
>>> (c==1).all()
False
>>> c = np.array([[1,1], [1,1]])
>>> (c==1).all()
True
【讨论】:
【参考方案3】:生成器函数 + all
可能是要走的路。
array_2D = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
all(all(item == 1 for item in items) for items in array_2D)
另一种选择是首先展平数组,但 python 没有标准的方法来做到这一点。但是代码可以处理任何类型的尺寸(如果你把它压得很深)!
【讨论】:
这将返回True
,无论数组中的元素如何。检查array_2D = [[1, 1, 1], 'aadsd', [1, 1, 1]]
您正在测试基因表达式的真实性,而不是值。您需要将内部for
移到第一个后面;更像是扁平化列表
@MosesKoledoye 哦该死的!已更正,谢谢!
嵌套循环和嵌套推导有什么区别?
@volcano 推导式是一个表达式,因此它返回一些内容,这对此很有用,因为我们可以使用推导式的结果并将其输入all
。循环是一个语句,因此它不返回任何内容。在 python 中,对这类事情使用更多的理解而不是循环是惯用的。
@TN1ck 表示 OP 不想嵌套【参考方案4】:
使用集合:
from itertools import chain
array = [[1,1,1],[1,0,1]]
if set(chain.from_iterable(array)) == 1:
print("all ones")
【讨论】:
这是一个很好的替代方案,但可能值得注意的是,如果发现第一个非1
值元素(如 all
或 any
解决方案会)。【参考方案5】:
您可以使用np.searchsorted 和np.apply_along_axis 来查找任何维度数组中的元素。
【讨论】:
以上是关于在Python中检查二维数组中的所有元素是不是等于1 [重复]的主要内容,如果未能解决你的问题,请参考以下文章