在Python中找到列表中元素的索引的好方法是什么? 注意,列表可能没有排序。
是否有方法指定要使用的比较运算符?
在Python中找到列表中元素的索引的好方法是什么? 注意,列表可能没有排序。
是否有方法指定要使用的比较运算符?
当前回答
我通过改编一些教程发现了这一点。感谢谷歌,也感谢你们所有人;)
def findall(L, test):
i=0
indices = []
while(True):
try:
# next value in list passing the test
nextvalue = filter(test, L[i:])[0]
# add index of this value in the index list,
# by searching the value in L[i:]
indices.append(L.index(nextvalue, i))
# iterate i, that is the next index from where to search
i=indices[-1]+1
#when there is no further "good value", filter returns [],
# hence there is an out of range exeption
except IndexError:
return indices
一个非常简单的用法:
a = [0,0,2,1]
ind = findall(a, lambda x:x>0))
[2, 3]
附言:抱歉我的英语不好
其他回答
我使用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")
如果你只是想知道一个元素是否包含在列表中:
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> 'example' in li
True
>>> 'damn' in li
False
假设你想在numpy数组中找到一个值, 我想这样做可能有用:
Numpy.where(arr=="value")[0]
来自Dive Into Python:
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.index("example")
5
有索引方法,i = array.index(value),但我不认为你可以指定一个自定义比较运算符。不过,编写自己的函数来实现这一点并不难:
def custom_index(array, compare_function):
for i, v in enumerate(array):
if compare_function(v):
return i