在列表中查找一个值[重复]

2024-03-01

我使用以下命令来检查是否item is in my_list:

if item in my_list:
    print("Desired item is in list")

Is "if item in my_list:“在列表中查找项目的最“Pythonic”方式?

编辑重新开放:这个问题被认为是重复的,但我并不完全相信:她这个问题大致是“什么是最重要的”Pythonic在列表中查找元素的方法”。这个问题的第一个答案在所有 Python 方法中都非常广泛。

而在链接的重复问题及其相应答案上,焦点大致仅限于 Python 中的“in”关键字。我认为与当前的问题相比,这确实是有限制的。

我认为当前问题的答案比拟议的重复问题/答案的答案更相关和更详细。


至于你的第一个问题:“if item is in my_list:“ 完全没问题,如果item等于里面的元素之一my_list。该项目必须exactly匹配列表中的项目。例如,"abc" and "ABC"不匹配。浮点值尤其可能会出现不准确的情况。例如,1 - 1/3 != 2/3.

至于你的第二个问题:如果在列表中“查找”内容,实际上有几种可能的方法。

检查里面是否有东西

这是您描述的用例:检查某些内容是否在列表中。如您所知,您可以使用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如果您想知道,有时会很有用的方法where列表中存在某个元素:

[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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在列表中查找一个值[重复] 的相关文章

随机推荐