给定一个列表xs和一个值item,我如何检查xs是否包含item(即,如果xs的任何元素等于item)?是否有类似xs。contains(item)的东西?
有关性能考虑因素,请参见检查列表中是否存在值的最快方法。
给定一个列表xs和一个值item,我如何检查xs是否包含item(即,如果xs的任何元素等于item)?是否有类似xs。contains(item)的东西?
有关性能考虑因素,请参见检查列表中是否存在值的最快方法。
当前回答
我最近想出了这个语句,如果一个列表包含某个项的任意次数,则返回True,如果它不包含任何项,则返回False。使用next(…)会给它一个默认的返回值(False),这意味着它应该比运行整个列表理解快得多。
list_does_contain = next((如果项目== test_item,则list_to_test中的项目为True), False)
其他回答
还有一种使用索引的方法。但我不确定这是否有任何错误。
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")
输出:
不存在
还有list方法:
[2, 51, 6, 8, 3].__contains__(8)
# Out[33]: True
[2, 51, 6, 3].__contains__(8)
# Out[33]: False
我最近想出了这个语句,如果一个列表包含某个项的任意次数,则返回True,如果它不包含任何项,则返回False。使用next(…)会给它一个默认的返回值(False),这意味着它应该比运行整个列表理解快得多。
list_does_contain = next((如果项目== test_item,则list_to_test中的项目为True), False)
除了其他人所说的,你可能还想知道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
>>>
如果条目不存在,列表方法index将返回-1;如果条目存在,则返回该条目在列表中的索引。或者在if语句中执行以下操作:
if myItem in list:
#do things
你也可以用下面的if语句检查一个元素是否不在列表中:
if myItem not in list:
#do things