当前位置:  开发笔记 > 编程语言 > 正文

Python:在列表中查找元素

如何解决《Python:在列表中查找元素》经验,为你挑选了8个好方法。

在Python中查找列表中元素索引的好方法是什么?
请注意,列表可能未排序.

有没有办法指定要使用的比较运算符?



1> Matt Howell..:

从Dive Into Python:

>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.index("example")
5


但是当元素不在列表中时,此代码会出错.在当前示例上下文中,如果我搜索'three'(即:li.index('three'))会给出错误.
您可以捕获错误以检测列表中何时没有内容.`try:li.index("three")除了ValueError:found = false`

2> Eduardo..:

如果您只是想知道列表中是否包含元素:

>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> 'example' in li
True
>>> 'damn' in li
False



3> Brian R. Bon..:

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

资源



4> ThomasH..:

这是使用列表理解的另一种方式(有些人可能会发现它有争议).对于简单的测试来说非常平易近人,比如对象属性的比较(我需要很多):

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

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


`el = [x for m in mylist if x.attr =="foo"]``if el:用el [0]做一些事情`解决了"存在"问题

5> 小智..:

假设你想在一个numpy数组中找到一个值,我想这样的事情可能会起作用:

Numpy.where(arr=="value")[0]



6> David Z..:

index方法,i = array.index(value)但我认为你不能指定自定义比较运算符.不过,编写自己的函数并不难:

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



7> Jarret Hardi..:

列表的索引方法将为您执行此操作.如果您想保证订单,请先使用排序列表sorted().Sorted接受cmp或key参数来指示排序将如何发生:

a = [5, 4, 3]
print sorted(a).index(5)

要么:

a = ['one', 'aardvark', 'a']
print sorted(a, key=len).index('a')



8> jki..:

我使用函数返回匹配元素的索引(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")

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有