2016-12-20 6 views
0

ich sub lists ein Name aus einem large list zugewiesen haben, wie folgt:Zuordnung Unterlisten einer Liste einen Namen effizienter

AB, CD, EF, GH, IJ, KL, MN, OP, QR, ST, UV, WQ, YZ, AA, BB, CC, DD, EE, FF, GG = large_list[0], large_list[1], large_list[2], large_list[3], large_list[4], large_list[5], large_list[6], large_list[7], large_list[8], large_list[9], large_list[10], large_list[11], large_list[12], large_list[13], large_list[14], large_list[15], large_list[16], large_list[17], large_list[18], large_list[19] 

Dies scheint ziemlich unpraktisch, daher frage mich, ob es eine Methode, die in Betracht gezogen wird, effizienter oder sogar kürzer für diese Angelegenheit.

Ich nehme an, irgendeine Form würde eine Schleife helfen? z.B. for sub_list in large_list: ???

+0

Muss die linke Seite der Zuweisung auch automatisiert werden? Die linke Seite ist ziemlich einfach, wie Python es für Sie automatisch tut – Adirio

Antwort

1

Ich würde für diese

li = ["AB", "CD", "EF", "GH", "IJ", "KL", "MN", "OP", "QR", "ST", "UV", "WQ", "YZ", "AA", "BB", "CC", "DD", "EE", "FF", "GG" ] 
dicti = {} 
for subList,key in zip(large_list,li): 
    dicti[key] = subList 

Sie dict Verständnis verwenden können, als auch die Verwendung ein Wörterbuch haben:

li = ["AB", "CD", "EF", "GH", "IJ", "KL", "MN", "OP", "QR", "ST", "UV", "WQ", "YZ", "AA", "BB", "CC", "DD", "EE", "FF", "GG" ] 
dicti = dicti = {key: sub_ist for key, sub_ist in zip(li, large_list)} 

Wie Chris_Rands schrieb am Kommentar, können Sie einfach tun:

dict(zip(li,large_list)) 
+2

Vereinbaren Sie, dass Wörterbuch der richtige Weg ist, um hier zu gehen, aber Sie können einfach 'dict (zip (li, large_list))' –

+0

Korrekte, ich werde es zur Antwort hinzufügen, danke @Chris_Rands –

+0

Warum ein Wörterbuch über eine Liste in dieser Fall? – LearningToPython

2

Sie Pythons Auspacken Fähigkeiten verwenden können:

L = list(range(10)) 
a, b = L[:2] 

Für Ihren Fall:

AB, CD, EF, GH, IJ, KL, MN, OP, QR, ST, UV, WQ, YZ, AA, BB, CC, DD, EE, FF, GG = large_list[:20] 

Zur besseren Lesbarkeit können Sie Linien brechen, Klammer mit:

large_list = list(range(100)) 
(AB, CD, EF, GH, IJ, KL, MN, OP, QR, ST, UV, WQ, 
YZ, AA, BB, CC, DD, EE, FF, GG) = large_list[:20] 

Jetzt AB ist 0 und GG19

+0

ist es möglich zu verwenden .... larelist [: len (larglist)]? –

+0

@AriGold Das würde nicht helfen, der Punkt ist, die Liste zu kürzen, so dass es nur so lange ist, wie die Anzahl der Variablen zugewiesen ist (was 20 ist). Wenn 'big_list' länger als 20 ist, möchten Sie es auf 20 Elemente reduzieren. – SuperBiasedMan

+0

Warum ist 'list (range (100))' notwendig? Es scheint ohne zu funktionieren. – LearningToPython

1

Python hat etwas namens Tupel Entpacken, wo Sie zuweisen können mehrere Werte aus einer Sammlung. Es "entpackt" die Sammlung, um sie in alle Teile zu verwandeln. Hier ist ein einfaches Beispiel:

numbers = [1, 2, 3] 
a, b, c = numbers 
# a, b, c = [1, 2, 3] 
# a = 1, b = 2, c = 3 

So können Sie Ihre Methode nur tun, indem Sie den Listennamen, die auf der rechten Seite:

AB, CD, EF, GH, IJ, KL, MN, OP, QR, ST, UV, WQ, YZ, AA, BB, CC, DD, EE, FF, GG = large_list 

Obwohl, wenn large_list mehr oder weniger Elemente in sich hat, als Sie die Zuordnung um, werden Sie Fehler bekommen. (dh wenn large_list 21 Elemente hat, aber Sie versuchen, 20 zuzuweisen). Sie können verhindern, dass es zu groß ist, indem Sie large_list[:20] verwenden, um nur die ersten 20 Elemente in der Liste zu übernehmen.

Verwandte Themen