在Python中查找列表中元素索引的好方法是什么?
请注意,列表可能未排序.
有没有办法指定要使用的比较运算符?
从Dive Into Python:
>>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements'] >>> li.index("example") 5
如果您只是想知道列表中是否包含元素:
>>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements'] >>> 'example' in li True >>> 'damn' in li False
最好的方法可能是使用list方法.index.
对于列表中的对象,您可以执行以下操作:
def __eq__(self, other): return self.Value == other.Value
您需要任何特殊处理.
你也可以使用枚举(arr)的for/in语句
查找值> 100的项的索引的示例.
for index, item in enumerate(arr): if item > 100: return index, item
资源
这是使用列表理解的另一种方式(有些人可能会发现它有争议).对于简单的测试来说非常平易近人,比如对象属性的比较(我需要很多):
el = [x for x in mylist if x.attr == "foo"][0]
当然,这假设列表中存在(并且实际上是唯一性)合适的元素.
假设你想在一个numpy数组中找到一个值,我想这样的事情可能会起作用:
Numpy.where(arr=="value")[0]
有index
方法,i = array.index(value)
但我认为你不能指定自定义比较运算符.不过,编写自己的函数并不难:
def custom_index(array, compare_function): for i, v in enumerate(array): if compare_function(v): return i
列表的索引方法将为您执行此操作.如果您想保证订单,请先使用排序列表sorted()
.Sorted接受cmp或key参数来指示排序将如何发生:
a = [5, 4, 3] print sorted(a).index(5)
要么:
a = ['one', 'aardvark', 'a'] print sorted(a, key=len).index('a')
我使用函数返回匹配元素的索引(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")