从数组列表中删除数组Python

2024-06-06 12:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用这种方法从数组列表中删除数组

i = np.array([1,2])
facets = [np.array([1,2]),np.array([3,4])]

我要删除一个元素

facets.remove(np.array(i[0],i[1]))

但得到一个错误:

ValueError                                Traceback (most recent call last)
<ipython-input-131-c0d040653e23> in <module>()
----> 1 facets.remove([i[0],i[2]])

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

有办法解决这个问题吗?


Tags: 方法元素most列表错误np数组call
3条回答

最简单的方法是使用all()逐元素比较列表元素和要删除的元素,并返回所有不匹配的元素。请注意,这将删除列表中与要删除的数组匹配的所有元素。

[ x for x in facets if not (x==i).all()]

请考虑以下示例:

ls = [1, 2, 3, 1]
ls.remove(1)

此代码的作用类似于:

  1. 遍历ls的元素。
  2. 检查每个元素是否等于1
  3. 如果是,它会弹出该元素,并中断迭代。

在步骤2中,代码试图比较两个numpy数组,如array1 == array2。问题是numpy为这个比较返回一个真值数组。

>>> np.array([1,2]) == np.array([1,3])
array([ True, False], dtype=bool)

所以,你必须实现你自己的类移除方法。

def remove_from_array(base_array, test_array):
    for index in range(len(base_array)):
        if np.array_equal(base_array[index], test_array):
            base_array.pop(index)
            break
    raise ValueError('remove_from_array(array, x): x not in array')

用法:

i = np.array([1,2])
facets = [np.array([1,2]),np.array([3,4])]
remove_from_array(facets, i)

print facets # [array([3, 4])]

请尝试以下操作:

facets.remove(np.array(i[0],i[1]))

这对我的作用如下:

>>> i = list([1,2])
>>> facets = [list([1,2]),list([3,4])]
>>> facets.remove(list([i[0],i[1]]))
>>> facets
[[3, 4]]

相关问题 更多 >