2017-01-24 11 views
6

Как обрабатывать переписку переменной длины для распаковки в Python2?Как обрабатывать распаковку расширений переменной длины в Python2?

В Python3, если у меня есть переменная длина подсписка, я мог бы использовать эту идиому:

>>> x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)] 
>>> for i, *item in x: 
...  print (item) 
... 
[2, 3, 4, 5] 
[4, 6] 
[5, 6, 7, 8, 9] 

В python2, это неверный синтаксис:

>>> x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)] 
>>> for i, *item in x: 
    File "<stdin>", line 1 
    for i, *item in x: 
     ^
SyntaxError: invalid syntax 

Кстати, этот вопрос немного по-другому от Idiomatic way to unpack variable length list of maximum size n, где решение требует знания фиксированной длины.

И этот вопрос специфичен для решения проблемы в Python2.

+0

Duplicate of [Extended tuple распаковка в Python 2] (http://stackoverflow.com/q/5333680/2301450) – vaultah

ответ

5

Python 2 не имеет синтаксиса splat (*item). Самый простой и наиболее интуитивный путь длинный путь вокруг:

for row in x: 
    i = row[0] 
    item = row[1:] 
+0

или в одной строке 'i, item = row [0], row [1:] ', который я лично предпочитаю – nigel222

1

Вы также можете сделать это:

x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)] 

for lista in x: 
    print (lista[1:]) 

Или, используя список понимание, а также:

x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)] 

new_li = [item[1:] for item in x] 
0

Вы можете попробовать Это: -

x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)] 
for item in x: 
    print (list(item[1:])) 
2

Если вы Планируете об использовании этой конструкции много может быть стоит писать маленький помощник:

def nibble1(nested): 
    for vari in nested: 
     yield vari[0], vari[1:] 

, то вы можете написать цикл

for i, item in nibble1(x): 
    etc. 

Но я как-то сомневаюсь, что вы найдете, что достаточно элегантно. ..