Python:在列表中查找
我使用以下来检查是否在:item
my_list
if item in my_list:
print("Desired item is in list")
但有时,它找不到该项目。这是为什么呢?
“”是在列表中查找项目的最“pythonic”方式吗?if item in my_list:
我使用以下来检查是否在:item
my_list
if item in my_list:
print("Desired item is in list")
但有时,它找不到该项目。这是为什么呢?
“”是在列表中查找项目的最“pythonic”方式吗?if item in my_list:
至于你的第一个问题:“”是完全没问题的,如果等于里面的元素之一,应该工作。该项目必须与列表中的某个项目完全匹配。例如,不匹配。特别是浮点值可能会受到不准确的影响。例如。if item is in 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中。在这里,您可以看到工作中的高阶函数。在 Python 3 中,不返回列表,而是返回类似生成器的对象。filter
如果您只想要与条件匹配的第一件事(但您还不知道它是什么),则可以使用for循环(可能也使用子句,这并不是众所周知的)。您还可以使用else
next(x for x in lst if ...)
这将返回第一个匹配项,如果未找到任何匹配项,则引发 a。或者,您可以使用StopIteration
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]
如果要查找一个元素或在 中使用 default,则在 列表中找不到该项目时,它不会引发:None
next
StopIteration
first_or_default = next((x for x in lst if ...), None)