我有一个在 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]
但是,我真的不确定这是否会给你带来比你已经拥有的更好的东西。
关于python - 如何轻松地将数组的额外元素解压缩到单个变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20672046/