小编典典

Python:在列表中查找

all

我遇到过这个:

item = someSortOfSelection()
if item in myList:
    doMySpecialFunction(item)

但有时它不适用于我的所有项目,就好像它们在列表中未被识别(当它是字符串列表时)。

这是在列表中查找项目的最“pythonic”方式吗:if x in l:


阅读 279

收藏
2022-03-02

共1个答案

小编典典

至于您的第一个问题:该代码非常好,如果item等于其中的一个元素,则应该可以工作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如果没有找到,它将返回第一个匹配项或引发 a 。或者,您可以使用

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]
2022-03-02