2016-06-12 6 views
1

Ich versuche, eine Funktion zu schreiben, die verschachtelten Listen in ihrer Gesamtheit durchsucht alle Listen zurück, die ein bestimmtes Wort enthalten, aber dies nur kehrt NoneListe Verständnis - Iterieren über verschachtelte Listen

word = "what song?" 
def searchSong(mp3_list, word): 
    search = input((word)) 
    match = [i for i in mp3_list if search in i[2]] 
for confirmed in match: 
    print(confirmed[0],'\n', confirmed[1],'\n', confirmed[2]) 

print(searchSong(mp3_list, word)) 

Wenn ich Vergleich tun Tests, die match Variable gibt noch nichts:

mp3_list = [["Eric Clapton","Tears in heaven","Rush"],["Neil Young", "Heart of gold", "Harvest"]] 
match = [i for i in mp3_list if 'heaven' in i[2]] 
print(match)  #returns [] 

Aber das funktioniert, trotz der Syntax erscheinen, genau das gleiche:

li = [["0", "20", "ar"], ["20", "40", "asdasd"], ["50", "199", "bar"]] 
match = [i for i in li if 'ar' in i[2]] 
print(match)  #returns [['0', '20', 'ar'], ['50', '199', 'bar']] 

Jede Hilfe wäre sehr geschätzt :)

+1

"Himmel" ist nicht in 'i [2]' in Ihrem ersten Beispiel, es ist in 'i [1]'. – sberry

Antwort

1

'Himmel' in ["Eric Clapton","Tears in heaven","Rush"] in dem zweiten Element vorhanden ist, aber Sie überprüfen die dritte Element (i[2]). Python-Arrays sind indexiert von 0 beginnend, nicht 1. (Aber Sie scheinen dies zu wissen, wie Ihr zweites Beispiel sucht nach „ar“ in i[2], was richtig ist.)

Auch searchSong() nicht Rückkehr alles Daher gibt es immer standardmäßig None zurück.

1
mp3_list = [["Eric Clapton","Tears in heaven","Rush"],["Neil Young", "Heart of gold", "Harvest"]] 
match = [i for i in mp3_list for j in i if 'heaven' in j] 
match 
Out[7]: [['Eric Clapton', 'Tears in heaven', 'Rush']] 


li = [["0", "20", "ar"], ["20", "40", "asdasd"], ["50", "199", "bar"]] 
match = [i for i in li for j in i if 'ar' in j] 
match 
Out[10]: [['0', '20', 'ar'], ['50', '199', 'bar']] 
+0

Ich dachte nicht, verschachtelte for-Schleife innerhalb einer Liste Verständnis verwenden, danke MaThMaX :) – AJP

+1

@AJP, so funktioniert es, egal, Ihre 'Schlüssel' auf welchem ​​Index Ihrer inneren Liste. Aber John Gordon hat recht, der Python-Index beginnt immer bei 0 – MaThMaX