2016-04-02 12 views
-1

Ich versuche, ein Programm zu machen, die einen bestimmten Wert in einer verschachtelten Liste findet, so schrieb ich diesen Code:Mit .index() Funktion in verschachtelten Listen

list = [['S', 'T', 'U', 'T'], ['O', 'P', 'Q', 'R']] 

Allerdings, wenn ich

eingegeben
list.index('O') 

Es gab mir eine Fehlermeldung

Traceback (most recent call last): 
File "<pyshell#11>", line 1, in <module> 
list.index('O') 
ValueError: 'O' is not in list 

sagen irgendwelche Ideen?

+0

Sehr klar formuliert. Ich bin neugierig, der beste Weg, dies auch zu tun. – efreed

Antwort

2

Nun, es ist wirklich einfach, 'O' ist nicht in der Liste, es enthält nur die anderen Listen. Hier ein Beispiel:

list_you_have = [['S', 'T', 'U', 'T'], ['O', 'P', 'Q', 'R']] 
print list_you_have.index(['O','P','Q','R']) #outputs 1 

Nun, wenn Sie tun es wie:

print list_you_have[1].index('O') # it outputs 0 because you're pointing to 
#list which acctualy contains that 'O' char. 

nun eine Funktion für verschachtelte char Suche wäre

def nested_find(list_to_search,char): 
    for i, o in enumerate(list_to_search): 
     if char in o: 
      print "Char %s found at list %s at index %s" % (char, i, o.index(char)) 

Oder vielleicht eine noch einfachere Lösung als @ zondo kommentiert wäre:

def nested_find(list_to_search,char): 
    newlist = sum(list_to_search, []) 
    if char in newlist: 
     print "Char %s is at position %s" % (char, newlist.index(char)) 
0

Sie können Ihr Problem in einer Linie lösen:

print item in reduce(lambda x, y: x + y, nestedlists) 
+1

Sie können 'sum (nestedlists, [])' anstelle des langen 'reduce()' Aufrufs verwenden. – zondo

Verwandte Themen