python查找列表中数组的索引

时间:2015-10-24 03:57:06

标签: python numpy

我所拥有的是一个列表,其中元素是这样的数组:

([1,2,3],[4,5,6],[7,8,9])

我想要的是找到此列表中元素的索引,如:

list.index([4,5,6]) #should return 1.

问题是numpy数组比较会引发错误,除非您输入类似:(A==B).all()

但是这个比较是里面的索引函数所以我不能也不想真正想要将all()位添加到函数中。对此有更简单的解决方案吗?

2 个答案:

答案 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

相关问题