在Python中找到列表中元素的索引的好方法是什么? 注意,列表可能没有排序。

是否有方法指定要使用的比较运算符?


当前回答

下面是另一种使用列表理解的方法(有些人可能会觉得有争议)。对于简单的测试,例如比较对象属性(我需要很多)是非常容易的:

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

当然,这假设列表中存在一个合适的元素(实际上是惟一性)。

其他回答

有索引方法,i = array.index(value),但我不认为你可以指定一个自定义比较运算符。不过,编写自己的函数来实现这一点并不难:

def custom_index(array, compare_function):
    for i, v in enumerate(array):
        if compare_function(v):
            return i

来自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

最好的方法可能是使用列表方法。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

我通过改编一些教程发现了这一点。感谢谷歌,也感谢你们所有人;)

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]

附言:抱歉我的英语不好