Python:在数组中find一个元素

在Python中的数组中find一个元素的索引的好方法是什么? 请注意,数组可能未被sorting。 有没有一种方法来指定使用什么比较运算符?

最好的方法可能是使用列表方法.index。

对于列表中的对象,您可以执行如下操作:

def __eq__(self, other): return self.Value == other.Value 

与您需要的任何特殊处理。

你也可以使用for / in语句来枚举(arr)

find值> 100的项目索引的示例。

 for index, item in enumerate(arr): if item > 100: return index, item 

资源

从深入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 

这是使用列表理解的另一种方式(有些人可能会觉得有争议)。 对于简单的testing是非常平易近人的,比如对象属性的比较(我需要很多):

 el = [x for x in mylist if x.attr == "foo"][0] 

当然,这假定列表中适当元素的存在(并且实际上是唯一的)。

假设你想在一个numpy数组中find一个值,我猜这样的东西可能会工作:

 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() 。 Sorted接受一个cmp或者key参数来决定如何sorting:

 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")] 

如果我需要在我的代码中的几个地方使用它,我只是定义特定的查找function,例如按名称查找元素:

 def find_name(l, name): return l[index(l, lambda item: item["name"] == name)] 

然后它很容易和可读:

 element = find_name(mylist,"my name") 

我通过调整一些辅导来find这个。 感谢谷歌,并向你们所有;)

 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] 

PS scuse我的英语

这个怎么样?

 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]