我所拥有的是一个列表,其中元素是这样的数组:
([1,2,3],[4,5,6],[7,8,9])
我想要的是找到此列表中元素的索引,如:
list.index([4,5,6]) #should return 1.
问题是numpy
数组比较会引发错误,除非您输入类似:(A==B).all()
但是这个比较是里面的索引函数所以我不能也不想真正想要将all()
位添加到函数中。对此有更简单的解决方案吗?
答案 0 :(得分:4)
您的上一条错误消息表明您仍在混合列表和数组。我会尝试重新创造这种情况:
列出清单。查找子列表可以正常工作:
In [256]: ll=[[1,2,3],[4,5,6],[7,8,9]]
In [257]: ll.index([4,5,6])
Out[257]: 1
从中制作一个数组 - 它是2d。
In [258]: la=np.array(ll)
In [259]: la
Out[259]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
它没有索引方法
In [260]: la.index([4,5,6])
...
AttributeError: 'numpy.ndarray' object has no attribute 'index'
将它设为列表 - 但我们得到你的ValueError:
In [265]: list(la).index([4,5,6])
...
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
那是因为list(la)
返回一个数组列表,而数组在==
个表达式中产生多个值:
In [266]: list(la)
Out[266]: [array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
从数组生成列表的正确方法是tolist
,它返回原始ll
列表列表:
In [267]: la.tolist().index([4,5,6])
Out[267]: 1
答案 1 :(得分:1)
如果您从一个numpy数组开始,您可以在使用index()
函数之前将其转换为列表列表,从而获得所需的结果,例如:
import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
lst = [list(x) for x in arr]
print (lst.index([4,5,6]))
...它给出了预期的输出1
。