Проверьте, существует ли ключ в списке 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"