列表是否有一个简短的包含函数?
- 2025-01-13 08:53:00
- admin 原创
- 87
问题描述:
给定一个列表xs
和一个值item
,如何检查 是否xs
包含item
(即 中的任何元素xs
是否等于item
)? 有没有类似 的东西xs.contains(item)
?
出于性能考虑,请参阅检查列表中某个值是否存在的最快方法。
解决方案 1:
使用:
if my_item in some_list:
...
另外,逆运算:
if my_item not in some_list:
...
它适用于列表、元组、集合和字典(检查键)。
请注意,在列表和元组中这是一个 O(n) 操作,但在集合和字典中这是一个 O(1) 操作。
解决方案 2:
除了其他人所说的之外,您可能还有兴趣知道什么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
>>>
解决方案 3:
我最近想出了这个单行代码,用于获取True
列表中是否包含某个项目的任意次数,或者False
是否不包含任何项目或什么都不包含。使用next(...)
会为其提供默认返回值 ( False
),这意味着它的运行速度应该比运行整个列表推导快得多。
list_does_contain = next((True for item in list_to_test if item == test_item), False)
解决方案 4:
如果项目不存在, list 方法index
将返回-1
,如果项目存在,则返回列表中项目的索引。或者,if
您可以在语句中执行以下操作:
if myItem in list:
#do things
您还可以使用以下 if 语句检查元素是否不在列表中:
if myItem not in list:
#do things
解决方案 5:
还有列表方法:
[2, 51, 6, 8, 3].__contains__(8)
# Out[33]: True
[2, 51, 6, 3].__contains__(8)
# Out[33]: False
解决方案 6:
还有一种方法是使用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")
输出:
不存在
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD