Skip to main content
 首页 » 编程设计

python之如何轻松地将数组的额外元素解压缩到单个变量中

2025年05月04日9mate10pro

我有一个在 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) 

如果可能的话,我只想要看起来更干净的东西。

请您参考如下方法:

你所拥有的是 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] 

但是,我真的不确定这是否会给你带来比你已经拥有的更好的东西。