Проверьте, существует ли ключ в списке Python
Предположим, что у меня есть список, который может иметь один или два элемента:
mylist=["important", "comment"]
или
mylist=["important"]
Затем я хочу, чтобы переменная работала как флаг в зависимости от этого второго значения, существующего или нет.
Какой лучший способ проверить, существует ли второй элемент?
Я уже сделал это с помощью len(mylist)
. Если это 2, это нормально. Он работает, но я бы предпочел знать, является ли второе поле "комментария" или нет.
Затем я пришел к этому решению:
>>> try:
... c=a.index("comment")
... except ValueError:
... print "no such value"
...
>>> if c:
... print "yeah"
...
yeah
Но выглядит слишком долго. Как вы думаете, это можно улучшить? Я уверен, что он может, но не может найти правильный путь из Документации по структурам данных Python.
Ответы
Ответ 1
Как насчет:
len(mylist) == 2 and mylist[1] == "comment"
Например:
>>> mylist = ["important", "comment"]
>>> c = len(mylist) == 2 and mylist[1] == "comment"
>>> c
True
>>>
>>> mylist = ["important"]
>>> c = len(mylist) == 2 and mylist[1] == "comment"
>>> c
False
Ответ 2
Вы можете использовать оператор in
:
'comment' in mylist
или, если позиция важна, используйте срез:
mylist[1:] == ['comment']
Последний работает для списков размером один, два или более и только True
, если список имеет длину 2, а второй элемент равен 'comment'
:
>>> test = lambda L: L[1:] == ['comment']
>>> test(['important'])
False
>>> test(['important', 'comment'])
True
>>> test(['important', 'comment', 'bar'])
False
Ответ 3
Используйте оператор in
:
>>> mylist=["important", "comment"]
>>> "comment" in mylist
True
Ах! Пропущенный часть, где вы сказали, вы просто хотите, чтобы "comment"
был вторым элементом. Для этого вы можете использовать:
len(mylist) == 2 and mylist[1] == "comment"