至于您的第一个问题:“如果item在my_list中:”非常好,如果item等于my_list内的一个元素,则应该可以使用。该项必须与列表中的项完全匹配。例如,“abc”和“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中。在这里你可以看到高阶函数在起作用。在Python3中,过滤器不返回列表,而是返回类似生成器的对象。
查找第一个事件
如果你只想要第一个匹配条件的东西(但你还不知道它是什么),可以使用for循环(也可以使用else子句,这不是很有名)。您也可以使用
next(x for x in lst if ...)
如果没有找到匹配项,则返回第一个匹配项或引发StopIteration。或者,您可以使用
next((x for x in lst if ...), [default value])
查找项目的位置
对于列表,如果您想知道某个元素在列表中的位置,也可以使用索引方法:
[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]