2013-12-19 43 views
2

我有一個多維數組,我在Python中循環。陣列的第二維度被可變像尺寸等:如何輕鬆將數組的多餘元素解包爲單個變量?

data = [ 
    [1, 2, 0, 0], 
    [1, 2, 0, 1], 
    [2, 1, 9], 
    [1, 3, 4, 2, 1], 
    [3, 2, 1, 4] 
] 

當通過它循環,是否有任何簡單的方法來解壓縮所述第二和 - 上的元素? 理想我想是這樣的:

for base, argtype, *args in data: 
    get_func(base, argtype)(*args) 

這並不工作,但我堅持了這樣的事情:

for entry in data: 
    base = data[0] 
    argtype = data[1] 
    args = data[2:] 
    get_func(base, argtype)(*args) 

我想要的東西,看起來清爽多了,如果可能的話。

回答

1

你有什麼是python3.x有效語法:

>>> for base, argtype, *args in data: 
...  print(base, argtype, args) 
... 
1 2 [0, 0] 
1 2 [0, 1] 
2 1 [9] 
1 3 [4, 2, 1] 
3 2 [1, 4] 

在python2.x,你幾乎套牢你有什麼。有一些變種,使其

for entry in data: 
    get_func(*entry[:2])(*entry[2:]) 

但我不相信這是更好的... ...

您還可以創建例如一個簡單的輔助發電機:

>>> gen = ((x[0],x[1],x[2:]) for x in data) 
>>> for base, argtype, args in gen: 
... print(base, argtype, args) 
... 
1 2 [0, 0] 
1 2 [0, 1] 
2 1 [9] 
1 3 [4, 2, 1] 
3 2 [1, 4] 

你甚至可以做一些有點聰明的事情:operator.itemgetter

>>> import operator 
>>> unpacker = operator.itemgetter(0,1,slice(2,None,None)) 
>>> for base, argtype, args in map(unpacker, data): 
...  print(base, argtype, args) 
... 
1 2 [0, 0] 
1 2 [0, 1] 
2 1 [9] 
1 3 [4, 2, 1] 
3 2 [1, 4] 

但是,我不確定這是否會讓你獲得比已有的更好的東西。

相關問題