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

标签 python arrays

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

相关文章:

python - 将元组扩展为参数

python - fasttext 中多标签的正确标签格式是什么?

arrays - Postgres 数组连接函数

javascript - 验证以分号分隔的多个电子邮件,并且所有电子邮件都必须与特定域匹配

c++ - 我是否应该始终声明比我的字符串大的 char 数组?

python - 尝试在 Python 包中读取 JSON 文件

python - 具有不同节点集的两个 NetworkX 图之间的差异

python - 如何使用正则表达式 re.compile 创建捕获组?

JavaScript 使用 splice() 对数组进行排序,结果为 NaN

c - 将数组的字符元素替换为用户输入输入的另一个字符