是否有列表的短包含功能?

时间:2012-10-17 12:19:54

标签: python list search collections contains

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

if list.contains(myItem):
    # do something

6 个答案:

答案 0 :(得分:749)

您可以使用以下语法:

if myItem in list:
    # do something

另外,逆算子:

if myItem not in list:
    # do something

它适用于列表,元组,集合和词组(检查键)。

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

答案 1 :(得分:60)

除了其他人所说的之外,您可能还有兴趣知道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
>>>         

答案 2 :(得分:5)

如果列表中包含任意数量的项目,我最近想出了这个内容来获取True,如果它不包含任何事件或者根本没有任何内容,我就会False。使用next(...)会为此提供一个默认返回值(False),这意味着它应该比运行整个列表推导更快地运行。

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

答案 3 :(得分:3)

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

if myItem in list:
    #do things

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

if myItem not in list:
    #do things

答案 4 :(得分:0)

还有列表方法:

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

答案 5 :(得分:0)

还有另一种使用 @admin.action(description='Delete entry') def delete_model(modeladmin, request, queryset): if not modeladmin.has_delete_permission(request): raise PermissionDenied for obj in queryset: obj.delete() class GrowEntryAdmin(admin.ModelAdmin): list_display = ['dateTime', 'airTemperature', 'airHumidity'] ordering = ['dateTime'] actions = [delete_model] 的方法。但我不确定这是否有任何错误。

index

输出:

<块引用>

不存在