Я вижу, что люди используют, anyчтобы собрать другой список, чтобы увидеть, существует ли элемент в списке, но есть ли быстрый способ сделать это ?:
if list.contains(myItem):
# do something
Я вижу, что люди используют, anyчтобы собрать другой список, чтобы увидеть, существует ли элемент в списке, но есть ли быстрый способ сделать это ?:
if list.contains(myItem):
# do something
Ответы:
Вы можете использовать этот синтаксис:
if myItem in list:
# do something
Также обратный оператор:
if myItem not in list:
# do something
Это отлично работает для списков, кортежей, наборов и диктовок (проверьте ключи).
Обратите внимание, что это операция O (n) в списках и кортежах, но операция O (1) в наборах и диктатах.
o='--skip'; o in ("--skip-ias"); # returns True !
("--skip-ias")это не кортеж, а строка (круглые скобки ничего не делают, как будто (1)это просто целое число). Если вам нужен 1-кортеж, вам нужно добавить запятую после одного элемента: ("--skip-ias",)(или (1,)).
В дополнение к тому, что сказали другие, вам также может быть интересно узнать, что 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
>>>
Я недавно придумал этот вкладыш, чтобы Trueузнать, содержит ли список какое-либо количество вхождений элемента или Falseесли он не содержит вхождений или вообще ничего. Использование next(...)дает этому возвращаемое значение по умолчанию ( False) и означает, что оно должно работать значительно быстрее, чем выполнение полного списка.
list_does_contain = next((True for item in list_to_test if item == test_item), False)
any(item == test_item for item in list_to_test)будет работать тоже, я думаю?
Метод list indexвернется, -1если элемент отсутствует, и вернет индекс элемента в списке, если он присутствует. В качестве альтернативы в ifзаявлении вы можете сделать следующее:
if myItem in list:
#do things
Вы также можете проверить, нет ли элемента в списке, с помощью следующего оператора if:
if myItem not in list:
#do things
indexМетод не возвращает -1 , если элемент отсутствует, он выбрасывает ValueErrorисключение.