Python:在列表中查找
我碰到过这个:
item = someSortOfSelection()
if item in myList:
doMySpecialFunction(item)
但有时它不适用于我的所有项目,就好像它们在列表中未被识别(当它是一个字符串列表)。
它是在列表中找到一个项目的最“pythonic”方法: if x in l:
:?
至于你的第一个问题:该代码是完全正常的,并应该工作,如果item
等于myList
中的元素myList
。 也许你试图找到一个不完全匹配其中一个项目的字符串,或者你正在使用一个不准确的浮点值。
至于你的第二个问题:如果在列表中“发现”事物,实际上有几种可能的方法。
检查内部是否有东西
这是您描述的用例:检查列表中是否有内容。 正如你所知道的,你可以使用in
运算符:
3 in [1, 2, 3] # => True
过滤集合
也就是说,找到满足一定条件的序列中的所有元素。 你可以使用列表理解或生成器表达式:
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
后者将返回一个生成器,您可以将其想象为一种懒惰列表,只有在遍历它时才会生成。 顺便说一句,第一个完全等同于
matches = filter(fulfills_some_condition, lst)
在Python 2.在这里你可以看到工作中的高阶函数。 在Python 3中, filter
器不返回列表,而是返回一个类似生成器的对象。
查找第一次出现
如果你只想匹配一个条件的第一件事(但你不知道它是什么),那么使用for循环(可能还使用else
子句,这并不是真正公知的)是很好的。 你也可以使用
next(x for x in lst if ...)
如果没有找到,它将返回第一个匹配或者引发StopIteration
。 或者,您可以使用
next((x for x in lst if ...), [default value])
查找物品的位置
对于列表,还有一些index
方法,如果您想知道列表中某个元素的位置,有时可能会有用。
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
但是,请注意,如果您有重复项, .index
始终返回最低索引:......
[1,2,3,2].index(2) # => 1
如果有重复,并且你想要所有的索引,那么你可以使用enumerate()
来代替:
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
如果你想查找一个元素或者None
在next
使用default,那么如果在列表中找不到该项目,它将不会引发StopIteration
:
first_or_default = next((x for x in lst if ...), None)
虽然Niklas B.的答案非常全面,但是当我们想要在列表中找到某个项目时,获取其索引有时很有用:
next((i for i, x in enumerate(lst) if [condition on x]), [default value])
链接地址: http://www.djcxy.com/p/47257.html
上一篇: Python: Find in list