对于你的第一个问题:如果item
等于my_list
中的某个元素,则"if item is in my_list:
"是完全可以的,并且应该能够工作。这个元素必须与列表中的某个元素完全匹配。例如,"abc"
和"ABC"
不匹配。
特别是浮点数可能会因精度问题而产生错误。例如1 - 1/3 != 2/3
。
至于你的第二个问题:在列表中查找东西实际上有几种可能的方法。
检查是否存在某个元素
这就是你所描述的用例:检查某个元素是否在列表中。如你所知,可以使用in
运算符来实现:
3 in [1, 2, 3]
筛选集合
即查找序列中满足特定条件的所有元素。你可以使用列表推导式或生成器表达式来实现:
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,2,3].index(4)
需要注意的是,如果存在重复项,.index
总是返回最低的索引值:
[1,2,3,2].index(2) # => 1
如果存在重复值且您希望获取所有索引,则可以使用enumerate()
:
[i for i,x in enumerate([1,2,3,2]) if x==2]
item
等于myList
中的某个元素,那就完全没问题并且应该能起作用。 - Niklas B.'x' in [['a','b'],['x','y']]
搜索嵌套列表并评估为True
,但它显然没有(x
既不等于['a','b']
也不等于['x','y']
)。由于从未有[MRE]解释“有时”,我们无法知道打算解决什么问题。对于简单的情况,链接的重复问题提出了更好的问题,并且具有权威答案。 - Karl Knechtel