2012-12-15 8 views
18

Sto imparando Python dalla classe codice di Google. Sto provando gli esercizi.ValueError: servono più di 0 valori per decomprimere (liste python)

def front_x(words): 
    x_list, ord_list = [] 
    for word in words: 
    if word[0] == 'x': 
     x_list.append(word) 
    else: 
     ord_list.append(word) 
    return sorted(x_list) + sorted(ord_list)  

Credo che l'errore sia stato generato a causa dell'inizializzazione di due elenchi vuoti su una singola riga. Se li si inizializza su righe separate, non si verificano più errori. È questa la ragione?

+12

downvoters si prega di lasciare un commento – kunaguvarun

risposta

31

Si sta tentando di utilizzare l'assegnazione tuple:

x_list, ord_list = [] 

probabilmente si intende utilizzare l'assegnazione multipla:

x_list = ord_list = [] 

che sarà non fare quello che aspettati che; Utilizzare il seguente invece:

x_list, ord_list = [], [] 

o, meglio ancora:

x_list = [] 
ord_list = [] 

Quando si utilizza un elenco separato da virgole di nomi di variabili, Python si aspetta che vi sia una sequenza di espressioni sul lato destro che corrisponde alle variabili numeriche; il seguente sarebbe anche legale:

two_lists = ([], []) 
x_list, ord_list = two_lists 

Questo è chiamato tuple disimballaggio. Se, d'altro canto, si è tentato di utilizzare assegnazione multipla con uno elenco vuoto letterale (x_list = ord_list = []) allora sia x_list e ord_list sarebbe indicando all stessa lista ed eventuali cambiamenti apportati i variabile sarà visibile sull'altro variabile:

>>> x_list = ord_list = [] 
>>> x_list.append(1) 
>>> x_list 
[1] 
>>> ord_list 
[1] 

mantenere Meglio cristallo cose chiare e utilizzare due distinte assegnazioni, dando ad ogni variabile la propria lista vuota.

+0

+1 @Martijn Pieters questo ha aiutato. Potresti approfondire il motivo per cui hai classificato i diversi approcci nel modo in cui hai fatto. Cercando di imparare alcune buone pratiche su questo. – vanilla

+0

@musked: non sei sicuro di cosa intendi. Nella migliore delle ipotesi ho due approcci chiamati, uno che usa l'assegnazione della tupla e uno che usa due compiti separati. Userei quest'ultimo perché è più esplicito, la leggibilità conta. –

+0

sì, questo è esattamente ciò che intendevo, quindi hai classificato in base alla leggibilità, ho pensato che potrebbe esserci qualcosa che ho perso. – vanilla

4

Modificare la riga

x_list, ord_list = [] 

to 

x_list, ord_list = [], [] 
+0

Questa sarebbe la più semplice equivalente a quello che voglio fare. Grazie. – kunaguvarun

0
tipo

ritorno della funzione non corrisponde con i valori attesi in funzione ...

controllo il numero di variabili restituito dalla funzione e le variabili vi aspettate

Problemi correlati