在Python中找到列表中元素的索引的好方法是什么? 注意,列表可能没有排序。
是否有方法指定要使用的比较运算符?
在Python中找到列表中元素的索引的好方法是什么? 注意,列表可能没有排序。
是否有方法指定要使用的比较运算符?
当前回答
这个怎么样?
def global_index(lst, test):
return ( pair[0] for pair in zip(range(len(lst)), lst) if test(pair[1]) )
用法:
>>> global_index([1, 2, 3, 4, 5, 6], lambda x: x>3)
<generator object <genexpr> at ...>
>>> list(_)
[3, 4, 5]
其他回答
来自Dive Into Python:
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.index("example")
5
最好的方法可能是使用列表方法。index。
对于列表中的对象,你可以这样做:
def __eq__(self, other):
return self.Value == other.Value
您需要的任何特殊处理。
你也可以在enumerate(arr)中使用for/in语句
使用实例查找值为> 100的项的索引。
for index, item in enumerate(arr):
if item > 100:
return index, item
源
列表的索引方法将为您完成此工作。如果想要保证顺序,请先使用sorted()对列表进行排序。Sorted接受cmp或key参数来指示如何进行排序:
a = [5, 4, 3]
print sorted(a).index(5)
Or:
a = ['one', 'aardvark', 'a']
print sorted(a, key=len).index('a')
假设你想在numpy数组中找到一个值, 我想这样做可能有用:
Numpy.where(arr=="value")[0]
我使用function返回匹配元素的索引(Python 2.6):
def index(l, f):
return next((i for i in xrange(len(l)) if f(l[i])), None)
然后使用它通过lambda函数检索所需的元素所需的任何方程,例如通过使用元素名称。
element = mylist[index(mylist, lambda item: item["name"] == "my name")]
如果我需要在我的代码中的几个地方使用它,我只是定义特定的查找函数,例如通过名称查找元素:
def find_name(l, name):
return l[index(l, lambda item: item["name"] == name)]
然后它非常简单易读:
element = find_name(mylist,"my name")