2012-12-15 15 views
18

Uczę się Pythona z klasy kodu Google. Próbuję ćwiczeń.ValueError: do rozpakowania potrzeba więcej niż 0 wartości (listy pytonów)

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)  

Wierzę, że błąd został zgłoszony z powodu zainicjowania dwóch pustych list w jednym wierszu. Jeśli zainicjujesz je w osobnych liniach, nie wystąpią więcej błędów. Czy to jest powód?

+12

Downvoters proszę zostawić komentarz – kunaguvarun

Odpowiedz

31

Próbujesz użyć zadanie krotka:

x_list, ord_list = [] 

prawdopodobnie oznaczało używać wielu Zadanie:

x_list = ord_list = [] 

które nie będą robić to, co oczekuj tego; używać następujących zamiast:

x_list, ord_list = [], [] 

lub, najlepiej jeszcze:

x_list = [] 
ord_list = [] 

Podczas korzystania listę oddzielonych przecinkami nazw zmiennych, Python spodziewa się ciągiem wyrażeń po stronie prawej pasujące do zmiennych liczbowych; ponadto byłoby legalne:

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

To się nazywa rozpakowywanie krotek. Jeśli, z drugiej strony, próbowano użyć wielokrotnego przypisania z jeden pustą listę dosłownym (x_list = ord_list = []), następnie zarówno x_list i ord_list byłoby wskazując na tej samej liście a wszelkie zmiany dokonane przez jedną zmienną będzie widoczny po drugiej zmienna:

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

Lepiej zachować rzeczy krystalicznie czysta i używać dwóch oddzielnychzadania, dając każdej zmiennej swoją własną listę pustą.

+0

+1 @Martijn Pieters pomogło to. Czy mógłbyś wyjaśnić, dlaczego uplasowałeś różne podejścia tak, jak zrobiłeś? Próbując nauczyć się najlepszej praktyki w tym zakresie. – vanilla

+0

@musked: nie wiesz co masz na myśli. W najlepszym przypadku mam dwa podejścia o nazwie, jeden przy użyciu przypisania tuple, a drugi za pomocą dwóch oddzielnych zadań. Używałbym tego ostatniego, ponieważ jest bardziej wyraźny, liczy się czytelność. –

+0

Tak, właśnie o to mi chodziło, więc uszeregowałeś według czytelności, myślałem, że może być coś, czego mi brakowało. – vanilla

4

Zmień linię

x_list, ord_list = [] 

to 

x_list, ord_list = [], [] 
+0

To byłoby najprostsze odpowiednik tego, co chcę zrobić. Dzięki. – kunaguvarun

0
typ

powrót funkcji nie zgadza się z wartościami oczekiwanymi w funkcji ...

sprawdzić liczbę zmiennych wrócił z funkcji i zmiennych spodziewasz

Powiązane problemy