2013-10-08 5 views
7

Ich möchte eine Variable haben, die eine verschachtelte Liste von einer Anzahl von leeren Listen ist, die ich später ausfüllen kann. Etwas, das wie folgt aussieht: AberSo erstellen Sie eine Reihe von leeren verschachtelten Listen in Python

my_variable=[[], [], [], []] 

Ich weiß nicht vorher, wie viele Listen, die ich brauche, nur bei der Schaffung Schritt, daher brauche ich eine Variable a es zu bestimmen. Ich dachte über einfache my_variable=[[]]*a, aber das erstellt Kopien von Listen und es ist nicht das, was ich haben möchte.

ich tun konnte:

my_variable=[] 
for x in range(a): 
    my_variable.append([]) 

aber ich bin für eine elegantere Lösung (vorzugsweise Einzeiler) suchen. Gibt es irgendwelche?

+3

Ich denke, dass Sie dies überdenken müssen, Es scheint, als könnte es besser sein, ein Wörterbuch für Ihre Bedürfnisse zu verwenden. Konsultieren Sie [diesen Beitrag] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+4

'my_variable = [[] für _ in xrange (a)]' – inspectorG4dget

+4

mögliche Duplikate von [Python List Index] (http://stackoverflow.com/questions/13058458/python-list-index), [Probleme beim Erstellen einer Liste mit Listen einer bestimmten Größe] (http://stackoverflow.com/q/17411892) und [warum kann ich nicht nur ein einzelnes Element in einer verschachtelten Liste in Python ändern] (http://stackoverflow.com/q/10941032) –

Antwort

12

Versuchen ein list comprehension:

lst = [[] for _ in xrange(a)] 

Siehe unten:

>>> a = 3 
>>> lst = [[] for _ in xrange(a)] 
>>> lst 
[[], [], []] 
>>> a = 10 
>>> lst = [[] for _ in xrange(a)] 
>>> lst 
[[], [], [], [], [], [], [], [], [], []] 
>>> # This is to prove that each of the lists in lst is unique 
>>> lst[0].append(1) 
>>> lst 
[[1], [], [], [], [], [], [], [], [], []] 
>>> 

ist jedoch zu beachten, dass die oben für Python 2.x ist Auf Python 3.x, da xrange entfernt wurde, werden Sie dies:

lst = [[] for _ in range(a)] 
+0

Ich hatte einen Verdunkelungsmechanismus, über den ich noch nicht über Listenverständnis nachgedacht habe. :) Ich frage mich jedoch, warum 'xrange' auf Python 2.x besser ist als' range'? Sie arbeiten beide gleich, nicht wahr? –

+1

@ AndyS.c. - Nicht wirklich. In Python 2.x ist 'xrange' (das einen Xrange-Iterator zurückgibt) schneller als' range' (das eine Liste zurückgibt). In Python 3.x. Allerdings wurde 'range' gemacht, um zu tun, was' xrange' tut und so'xrange' wurde entfernt. Hier ist eine Referenz: http: // stackoverflow.com/questions/135041/sollte-du-immer-bevorzugst-xrange-über-reichweite – iCodez

6
>>>[[] for x in range(10)] #To make a list of n different lists, do this: 
[[], [], [], [], [], [], [], [], [], []] 

Edit: -

[[]]*10 

Dies gibt Ihnen das gleiche Ergebnis wie oben, aber die Liste sind nicht verschiedene Instanzen, sie sind nur Referenzen auf dieselbe Instanz.

+4

Es wäre hilfreich zu demonstrieren, wie sich dies von '[[]] * 10' – inspectorG4dget

+0

ya das ist gut.Ich habe es verpasst. – Nullify

+2

Erweitern Sie Ihre Antwort, um dem Fragesteller zu erklären, warum dies das gewünschte Ergebnis erzielt und möglicherweise mit der Dokumentation verknüpft wird. Dies ist nur am Rande nützlich. –

Verwandte Themen