【问题标题】:How to check if an array is in a list of arrays in Python?如何检查一个数组是否在 Python 的数组列表中?
【发布时间】:2018-12-04 15:51:10
【问题描述】:

我有一个 3x3 数组 l 的列表,我想检查一个不同的单个 3x3 数组 a 是否在列表中。我试过这样:

a in l

但由于以下错误无法执行:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我不明白为什么这样的比较会模棱两可(意图很明确),但无论如何,有没有办法解决我的问题?

【问题讨论】:

标签: python arrays


【解决方案1】:

Numpy 对你想要做什么感到困惑。您想知道a 是否等同于l 的任何元素,或者a 是否是l 的元素。

a  = np.ones((3,3))
b = np.ones((3,3))
l  = [b]


b in l
>>True

a in l
>>
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-17-cf48b78477bf> in <module>()
----> 1 a in l

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

如果您想知道a 是否在l 中,则另一种方法是使用id() 函数。

所以

ids = map(id, l)

id(a) in ids
>> False

id(b) in ids
>>True

【讨论】:

  • 对不起,这里有什么区别:“如果 a 等价于 l 的任何元素或者如果 a 是 l 的元素”?如果 a 是 l 的任何元素,那么 a 是 l 的一个元素,对吧?
  • 我的意思是,这里有两种具体情况需要考虑: 1. 如果al 的元素相似,则意味着a 包含与l 中的元素相同的东西. 2. 如果al 的一个元素。示例:如果l 是汽车列表a = "red car",则现在 1. 如果您分配l =["red car","yellow car"],则a 等效于(等于)l 的元素,但如果您更改@987654341 的值@,a = "blue car",现在a 不等于l 的任何元素,但如果l 被定义为l =[a],那么您可以对aa in l 执行任何操作将始终为真.
【解决方案2】:

a.all()a.any() 只能使用 numpy 完成。现在 numpy 需要知道你是否认为它是匹配的 -

  • any - 任何元素匹配
  • all - 所有元素都匹配

这与意图无关。它是关于提供社区会觉得有帮助的功能。因此,在您的情况下,您可能会使用 a.all
This SO post 应该为您清除它。我基本上提供了上面的要点。

【讨论】:

    【解决方案3】:

    当我尝试它时,它对我来说效果很好,但我发现一些回报不准确。

    a= np.ones((3,3))
    b= np.ones((3,3))
    
    a in b
    #output True
    
    b in a 
    #output True
    

    但是当我将数组的长度更改为一个,而不是另一个时,出现了一些差异。

    a= np.ones((3,3))
    b= np.ones((4,3))
    
    a in b
    #Output- False    #this was the same for the reverse
    
    np.any(a ==b)
    #Output False   #This also threw up a depreciation warning forelementwise == comparison
    
    np.any(a[0] == b[0])
    #OutPut True
    
    for i in range(len(a)):
        if a[i] in b[i]:
            print('yes')
    #OutPut   yes yes yes
    

    似乎它不喜欢比较一个数组的数组,而是喜欢一个一个地比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 2017-04-18
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多