python - 在多维列表索引中使用 splat 运算符

标签 python python-3.x

假设我有列表

a = [[1, 2, 3], 
     [4, 5, 6]]

我有一个索引,我想用它来访问此列表的元素。

index = [1,2]

我想使用类似的东西

a[*index] = 9

表示a[index[0]][index[1]] = 9 ,但这不起作用, a[**index] = 9 也不起作用。是否有类似的方法可以在没有索引调用链的情况下执行此操作?

我想要一种方法来执行此操作,而无需使用任何必须导入的库。

最佳答案

首先a[c, d, e]相当于 a[(c, d, e)]相当于 a.__getitem__((c, d, e)) 。注意双括号。任何__getitem__想要与 Python 数据模型良好配合的实现总是需要一个(显式)参数。

这就是为什么从 index 中解压值的原因里面[]没有多大意义。 a[*index]会给你一个SyntaxErrora.__getitem__(*index)给你一个TypeError (因为你提供了太多的论据)。

标准 Python 列出了期望整数参数 __getitem__ ,但是numpy支持元组索引(numpy 数组仍然只接受 __getitem__ 的一个参数,但它允许是一个元组)。

演示:

>>> import numpy as np
>>> a = np.array([[1,2,3], [4,5,6]])
>>> a[(1,2)]
6

当然,你可以省略括号,因为

>>> a[1,2]
6

完全等价。

关于python - 在多维列表索引中使用 splat 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50453733/

相关文章:

python - 从 Pandas 获取 value_count() 的结果以实现卓越

python - Grpc python 客户端服务器流式传输未按预期工作

python - Windows:如何配置多个版本的Python以协同工作?

Python3 通过多处理并行化作业

python - 如果 x 在 dict.iterkey() 中,则 y 是 dict.value

python - Scrapy - 删除列表输出中的 html 标签

python - GeoPandas 绘图 - 有什么方法可以加快速度吗?

python - 在 Python 中打印转义的 Unicode

python - 使用属性序列化函数对象,加载时缺少一个属性

python - 值错误 : cannot switch from manual field specification to automatic field numbering