2013-08-06 3 views
11

Предположим, у меня есть список, который может иметь один или два элемента:Проверьте, если ключ существует в списке Python

mylist=["important", "comment"] 

или

mylist=["important"] 

Тогда я хочу, чтобы иметь переменную для работы как флаг в зависимости от этого 2-го значения, существующего или нет.

Каков наилучший способ проверить, существует ли второй элемент?

Я уже сделал это, используя len(mylist). Если это 2, это нормально. Он работает, но я бы предпочел узнать, является ли второе поле «комментария» или нет.

Затем я пришел к этому решению:

>>> try: 
...  c=a.index("comment") 
... except ValueError: 
...  print "no such value" 
... 
>>> if c: 
... print "yeah" 
... 
yeah 

Но выглядит слишком долго. Как вы думаете, это можно улучшить? Я уверен, что он может, но не может найти правильный путь от Python Data Structures Documentation.

ответ

7

насчет:

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 
6

Использование in Оператор:

>>> mylist=["important", "comment"] 
>>> "comment" in mylist 
True 

Ах! Пропущенная часть, где вы сказали, вы просто хотите, чтобы "comment" был вторым элементом. Для этого вы можете использовать:

len(mylist) == 2 and mylist[1] == "comment" 
23

Вы можете использовать in оператор:

'comment' in mylist 

или, если по sition важен использовать кусочек:

mylist[1:] == ['comment'] 

Последние произведения для списков, которые являются размером один, два или больше, и только True если список длина 2 и второго элемента равно 'comment' :

>>> test = lambda L: L[1:] == ['comment'] 
>>> test(['important']) 
False 
>>> test(['important', 'comment']) 
True 
>>> test(['important', 'comment', 'bar']) 
False 
Смежные вопросы