572

我看到人们正在使用any收集另一个列表来查看列表中是否存在某个项目,但是有没有一种快速的方法来做这样的事情?

if list.contains(myItem):
    # do something
4

6 回答 6

965

您可以使用以下语法:

if myItem in some_list:
    # do something

此外,逆运算符:

if myItem not in some_list:
    # do something

它适用于列表、元组、集合和字典(检查键)。

请注意,这在列表和元组中是 O(n) 操作,但在集合和字典中是 O(1) 操作。

于 2012-10-17T12:21:03.770 回答
69

除了其他人所说的之外,您可能还想知道什么in是调用list.__contains__方法,您可以在您编写的任何类上定义该方法,并且可以非常方便地充分利用 python。  

一个愚蠢的用途可能是:

>>> class ContainsEverything:
    def __init__(self):
        return None
    def __contains__(self, *elem, **k):
        return True


>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>         
于 2012-10-17T12:36:43.403 回答
7

我最近想出了一个衬里,用于获取True列表是否包含任意数量的项目,或者False它是否包含任何事件或根本没有。Usingnext(...)给它一个默认的返回值 ( False) 并且意味着它应该比运行整个列表理解运行得更快。

list_does_contain = next((True for item in list_to_test if item == test_item), False)

于 2017-01-25T23:08:12.543 回答
5

如果项目不存在, list 方法index将返回-1,如果存在,则返回列表中项目的索引。或者,if您可以在语句中执行以下操作:

if myItem in list:
    #do things

您还可以使用以下 if 语句检查元素是否不在列表中:

if myItem not in list:
    #do things
于 2012-10-17T12:22:43.537 回答
1

还有list方法:

[2, 51, 6, 8, 3].__contains__(8)
# Out[33]: True
[2, 51, 6, 3].__contains__(8)
# Out[33]: False
于 2021-05-26T13:11:42.843 回答
0

还有另一种方法使用index. 但我不确定这是否有任何错误。

list = [5,4,3,1]
try:
    list.index(2)
    #code for when item is expected to be in the list
    print("present")
except:
    #code for when item is not expected to be in the list
    print("not present")

输出:

不存在

于 2021-06-18T10:53:09.053 回答