2012-03-15 21 views
14
k = [u'query_urls', u'"kick"', u'"00"', u'msg=1212', u'id=11'] 

>>> name, view, id, tokens = k 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 

Muszę podać 5 zmiennych, aby rozpakować tę listę. Czy istnieje sposób na rozpakowanie z mniejszą liczbą, tak aby tokens dostał pozostałą część listy. Nie chcę pisać innej linii do dołączenia do listy ...Jak rozpakować listę z mniejszą ilością zmiennych?

Dzięki.


Oczywiście mogę wyciąć listę, przypisać indywidualnie itp. Ale chcę wiedzieć, jak zrobić to, co chcę, używając powyższej składni.

+1

Chcesz ignorować Reszta wartości? – anijhaw

+0

@anijhaw no i dont. pozostała część listy musi zostać przypisana do tokenów – User007

Odpowiedz

26

W Pythonie 3 można to zrobić: (edit: to się nazywa extended iterable unpacking)

name, view, id, *tokens = k 

W Pythonie 2, trzeba będzie to zrobić:

(name, view, id), tokens = k[:3], k[3:] 
+1

Dzięki. Nic dziwnego, że nie mogę zrobić "* tokenów", to tylko w Py3. Dzięki. Ta metoda plasterka wygląda naprawdę dobrze. Cóż, nigdy nie wiedziałem, że możemy to zrobić w pojedynczej linii. Jednak daje mi to "ValueError: potrzeba więcej niż 2 wartości do rozpakowania". Jestem na wersjach 2.6.5 – User007

+1

[PEP 3132] (http://www.python.org/dev/peps/pep-3132/) rozszerzyłem możliwość iteracji rozpakowywania w Pythonie 3. – agf

+0

Haha. W nawiasie robi się lewę. Dzięki i dziękuję! – User007

Powiązane problemy