给定一个列表xs和一个值item,我如何检查xs是否包含item(即,如果xs的任何元素等于item)?是否有类似xs。contains(item)的东西?


有关性能考虑因素,请参见检查列表中是否存在值的最快方法。


当前回答

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

if myItem in list:
    #do things

你也可以用下面的if语句检查一个元素是否不在列表中:

if myItem not in list:
    #do things

其他回答

除了其他人所说的,你可能还想知道In所做的是调用列表。__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
>>>         

还有list方法:

[2, 51, 6, 8, 3].__contains__(8)
# Out[33]: True
[2, 51, 6, 3].__contains__(8)
# Out[33]: False

Use:

if my_item in some_list:
    ...

同样,逆运算:

if my_item not in some_list:
    ...

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

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

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

if myItem in list:
    #do things

你也可以用下面的if语句检查一个元素是否不在列表中:

if myItem not in list:
    #do things

我最近想出了这个语句,如果一个列表包含某个项的任意次数,则返回True,如果它不包含任何项,则返回False。使用next(…)会给它一个默认的返回值(False),这意味着它应该比运行整个列表理解快得多。

list_does_contain = next((如果项目== test_item,则list_to_test中的项目为True), False)