2013-08-06 8 views
11

Angenommen, ich habe eine Liste, die entweder ein oder zwei Elemente aufweisen kann:Überprüfen Sie, ob ein Schlüssel vorhanden ist in einer Python-Liste

mylist=["important", "comment"] 

oder

mylist=["important"] 

Dann möchte ich eine Variable muss arbeiten als Flag abhängig von diesem 2. Wert vorhanden oder nicht.

Was ist der beste Weg zu prüfen, ob das 2. Element existiert?

Ich tat es bereits mit len(mylist). Wenn es 2 ist, ist es in Ordnung. Es funktioniert, aber ich würde lieber wissen, ob das 2. Feld ist genau "Kommentar" oder nicht.

kam ich dann zu dieser Lösung:

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

Aber schaut zu lang. Glaubst du, dass es verbessert werden kann? Ich bin mir sicher, dass es aber nicht gelingt, einen richtigen Weg von der Python Data Structures Documentation zu finden.

Antwort

7

Was:

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

Zum Beispiel:

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

Verwenden in Betreiber:

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

Ah! Verpasste den Teil, wo Sie gesagt haben, Sie wollen nur "comment" das zweite Element sein. Dafür können Sie:

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

Sie können den in Betreiber:

'comment' in mylist 

oder, wenn die po sition ist wichtig, eine Scheibe verwendet werden:

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

Letzteres funktioniert für Listen, die Größe eines sind, zwei oder mehr, und nur True wenn die Liste Länge beträgt 2 und das zweite Element gleich 'comment' :

>>> test = lambda L: L[1:] == ['comment'] 
>>> test(['important']) 
False 
>>> test(['important', 'comment']) 
True 
>>> test(['important', 'comment', 'bar']) 
False 
Verwandte Themen