在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 值元素(如 allany解决方案会)。【参考方案5】:

您可以使用np.searchsorted 和np.apply_along_axis 来查找任何维度数组中的元素。

【讨论】:

以上是关于在Python中检查二维数组中的所有元素是不是等于1 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查数组中所有元素是不是相等的最快方法

检查元素索引是不是在二维数组内(用于在任何方向移动一)

检查字符串是不是包含Python中数组中的多个元素

检查数组中的所有元素是不是都是字符串[重复]

PHP如何检查一个数组内是不是存在指定元素

无法检查数组是不是使用递归排序