Я вижу, что люди используют, 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
исключение.