Я вижу, что люди используют 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;
тогда он возвращает истину для обоих условий..