至于你的第一个问题:“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]