Я вижу, что люди используют 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
Он отлично работает для списков, кортежей, наборов и dicts (контрольные клавиши).
Примечание, что это операция O (n) в списках и кортежах, но операция O (1) в наборах и dicts.
В дополнение к тому, что говорили другие, вам также может быть интересно узнать, что то, что 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)
Метод списка index
вернет -1
, если элемент отсутствует, и вернет индекс элемента в списке, если он присутствует. Альтернативно в инструкции if
вы можете сделать следующее:
if myItem in list:
#do things
Вы также можете проверить, нет ли элемента в списке со следующим оператором if:
if myItem not in list:
#do things
Я нахожу, что это самый удобный способ сделать это, поскольку вы не можете использовать метод for loop для необъявленных жестко заданных значений.
if list.count(myItem) >= 1:
do something...
В качестве проблемного примера:
list = [111,222,333]
for 111 in list:
print "contained"
выдает ошибку, тогда как "если list.count(111) >= 1" не будет.
есть та же проблема
у меня есть список, в котором значения abc = [mai.csv, other.csv, attribute.csv] abc = [mai.csv, other.csv, attribute_data.csv], когда мы запускаем if attribute.csv в abc;
тогда он возвращает истину для обоих условий..