关于python:列表中是否包含short contains函数?

Is there a short contains function for lists?

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

1
2
if list.contains(myItem):
    # do something

您可以使用以下语法:

1
2
if myItem in list:
    # do something

此外,逆运算符:

1
2
if myItem not in list:
    # do something

对于列表、元组、集合和dict(检查键)来说,它工作得很好。

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


除了其他人所说的以外,您可能还有兴趣知道in所做的是调用list.__contains__方法,您可以在编写的任何类上定义该方法,并且可以非常方便地充分使用Python。nbsp;

愚蠢的使用可能是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> 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
>>>


我最近想出了一个办法,如果一个清单中包含了一个项目的出现次数,我就得到了True;如果一个清单中没有出现或根本没有出现,我就得到False。使用next(...)会给出一个默认的返回值(False),这意味着它应该比运行整个列表理解快得多。

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


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

1
2
if myItem in list:
    #do things

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

1
2
if myItem not in list:
    #do things