2013-08-06 30 views
11

Załóżmy, że mam listę, która może mieć jeden lub dwa elementy:Sprawdź, czy klucz istnieje na liście Pythona

mylist=["important", "comment"] 

lub

mylist=["important"] 

Następnie chcę mieć zmienną pracować jako flagę w zależności od tej drugiej wartości istniejącej lub nie.

Jaki jest najlepszy sposób sprawdzenia, czy drugi element istnieje?

Zrobiłem to już za pomocą len(mylist). Jeśli jest 2, jest w porządku. Działa, ale wolałbym wiedzieć, czy drugie pole jest dokładnie "komentarzem" czy nie.

I wtedy przyszedł do tego rozwiązania:

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

Ale wygląda na zbyt długo. Czy uważasz, że można to poprawić? Jestem pewien, że może to zrobić, ale nie udaje się znaleźć właściwej drogi od Python Data Structures Documentation.

Odpowiedz

7

Co o:

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

Na przykład:

>>> 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

Zastosowanie in operator:

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

Ach! Przegapiłeś część, w której powiedziałeś, po prostu chcesz, aby "comment" był drugim elementem. W tym celu można użyć:

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

Można użyć operatora in:

'comment' in mylist 

lub, jeśli po żenia jest ważna, należy użyć kawałek:

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

Te ostatnie prace na listach, które mają rozmiar jeden, dwa lub dłużej, a tylko True jeśli lista jest długość 2 i drugi element jest równy 'comment' :

>>> test = lambda L: L[1:] == ['comment'] 
>>> test(['important']) 
False 
>>> test(['important', 'comment']) 
True 
>>> test(['important', 'comment', 'bar']) 
False 
Powiązane problemy