2013-10-10 13 views
11

se ho un elenco, dire:Python: Assegnare ad ogni elemento di una lista ad un separato variabile

ll = ['xx','yy','zz'] 

e voglio assegnare ad ogni elemento di questa lista per una variabile indipendente:

var1 = xx 
var2 = yy 
var3 = zz 

senza sapere per quanto tempo la lista è, come farei questo? Ho provato:

max = len(ll) 
count = 0 
for ii in ll: 
    varcount = ii 
    count += 1 
    if count == max: 
     break 

So che varcount non è un modo valido per creare una variabile dinamica, ma quello che sto cercando di fare è creare Var0, var1, var2, var3 ect base a ciò che il conteggio è .

Grazie!

EDIT:

nvm dovrei iniziare una nuova domanda. Grazie per l'aiuto!

+17

perché mai vorresti farlo? –

+3

Le variabili sono solo nomi. Cosa c'è di sbagliato in 'll [0], ll [1], ll [2] ...' etc? – dansalmo

+0

Qual è l'usecase? Sembra che cosa potrebbe ripensare il tuo approccio – karthikr

risposta

9

Si dovrebbe tornare indietro e ripensare perché "hai bisogno" di variabili dinamiche. Le probabilità sono, è possibile creare la stessa funzionalità con il ciclo attraverso l'elenco o affettarlo in blocchi.

+3

+1 - A volte, la risposta migliore è quella di non rispondere, ma invece di dire "questo non è buono". – iCodez

+0

Non posso dire di non essere d'accordo ... – alexis

+0

Forse hai ragione. Immagino che le liste fossero una semplificazione. Quello di cui sto veramente parlando è un Dataframe di lunghezza sconosciuta che devo analizzare in un formato compatibile con le chiamate API. Il che significa che in pratica sto creando un dizionario per ogni "linea" del dataframe. In tal caso, dovrò comunque creare lo stesso numero di dizionari distinti, quindi ho pensato di creare solo variabili. Continuerò a pensarci su –

10

Non è una buona idea farlo; cosa farai con le variabili dopo averle definite?

Ma supponendo di avere una buona ragione, ecco come farlo in python:

for n, val in enumerate(ll): 
    globals()["var%d"%n] = val 

print var2 # etc. 

Qui, globals() è lo spazio dei nomi locale, presentato come un dizionario. La numerazione inizia da zero, come gli indici di array, ma puoi dire a enumerate() di iniziare da 1 invece.

Ma ancora: è improbabile che questo sia effettivamente utile per voi.

+1

Sono in downvoted perché ho effettivamente risposto alla domanda? Dai! – alexis

0

Invece, fare questo:

>>> var = ['xx','yy','zz'] 
>>> var[0] 
'xx' 
>>> var[1] 
'yy' 
>>> var[2] 
'zz' 
+0

Non mi piace. Lo scopo di assegnare ad avere il proprio nome. –

2

Se il numero di elementi non cambia è possibile convertire la lista in una stringa e dividerlo a variabili.

wedges = ["Panther", "Ali", 0, 360] 
a,b,c,d = str(wedges).split() 
print a,b,c,d 
+0

questo in realtà funziona per quello di cui ho bisogno: convertire una matrice in singoli argomenti in una lista di parametri di funzione – javadba

13

in generale è non suggerito di utilizzare questo tipo di programmazione per un gran numero di elementi/Lista variabili.

Tuttavia la seguente dichiarazione funziona bene e come previsto

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

Questo si chiama "destrutturazione".

in alcuni casi potrebbe farvi risparmiare alcune righe di codice, ad es. Ho a, b, c come interi e voglio loro valori di stringa come sa, sb, sc:

sa, sb,sc = [str(e) for e in [a,b,c]] 

o, meglio ancora

sa, sb,sc = map(str, (a,b,c)) 
+0

Grazie per questa risposta, questo è quello che sono venuto qui cercando. Non avevo un interprete di fronte a me e volevo sapere se 'problem, solution =" 1 + 1 = 2 ".split (" = ")' era valido, dato che 'split()' restituisce una matrice piuttosto di 2 valori – JHixson

0

Io parto dal presupposto che si sta ottenendo l'elenco per mezzo di una query SQL - perché non è possibile impegnarsi in una lunghezza.Con questo mi sembra ovvio che desideri prendere quei valori ed eseguire comandi SQL aggiuntivi usando separatamente ciascun valore da quella lista appena acquisita. Questo non è un concetto fuori moda se lo prendi da una prospettiva SQL, e se sono corretto fornirò la sintassi. Tuttavia non è necessario creare nomi di variabili separati con questa soluzione e non perdere la versatilità a cui si sta lavorando. SE SONO SBAGLIATO SBAGLIATO PER SPERIMENTARE IL TUO TEMPO

Problemi correlati