2013-02-11 4 views
6

Voglio creare una serie di elenchi con nomi univoci all'interno di un ciclo for e utilizzare l'indice per creare i nomi di lista. Ecco quello che voglio farecreare liste di nomi univoci in un per -loop in python

x = [100,2,300,4,75] 

for i in x: 

    list_i=[] 

voglio creare liste vuote, come

lst_100 = [], lst_2 =[] lst_300 = [].. 

alcun aiuto?

risposta

12

Non creare variabili con nome dinamico. Rende difficile programmare con loro. Utilizzare invece un dict:

x = [100,2,300,4,75] 
dct = {} 
for i in x: 
    dct['lst_%s' % i] = [] 

print(dct) 
# {'lst_300': [], 'lst_75': [], 'lst_100': [], 'lst_2': [], 'lst_4': []} 
+0

C'è un modo per farlo con mantenendo l'ordine del x originale? Invece vedo qui, e nella risposta di root, che l'ordine "100, 2, 300, 4, 75" non è stato conservato. Immagino che questa sia una proprietà del ditt. – Coolio2654

+0

@ Coolio2654: giusto. Le chiavi 'dict' non sono ordinate. Per preservare l'ordine in cui sono state inserite le chiavi, utilizzare ['collections.OrderedDict'] (https://docs.python.org/2/library/collections.html#collections.OrderedDict): (cambia' dct = { } '->' import collections' seguito da 'dct = collections.OrderedDict()'). – unutbu

5

utilizzare un dizionario di tenere le liste:

In [8]: x = [100,2,300,4,75] 

In [9]: {i:[] for i in x} 
Out[9]: {2: [], 4: [], 75: [], 100: [], 300: []} 

Per accedere a ciascuna lista:

In [10]: d = {i:[] for i in x} 

In [11]: d[75] 
Out[11]: [] 

E se si vuole veramente avere lst_ in ogni etichetta:

In [13]: {'lst_{}'.format(i):[] for i in x} 
Out[13]: {'lst_100': [], 'lst_2': [], 'lst_300': [], 'lst_4': [], 'lst_75': []} 
+0

Questo è stato il mio primo pensiero, ci vai prima: P –

+1

@ F3AR3DLEGEND - Penso che sia il modo più plateale per farlo :) – root

+0

Questa è una * comprensione del dizionario *? :-) –

0

Una leggera variazione delle soluzioni dict dell'altro consiste nell'usare un valore predefinito. Ti permette di saltare il passo di inizializzazione invocando il valore predefinito del tipo scelto.

In questo caso il tipo scelto è una lista, che vi darà liste vuote nel dizionario:

>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> d[100] 
[]