2024-04-25 20:26:28 发布
网友
假设我有清单
a = [[1, 2, 3], [4, 5, 6]]
我有一个索引,我想用它来访问这个列表的元素。在
我想用像
a[*index] = 9
意思是a[index[0]][index[1]] = 9,但这不起作用,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))。注意双括号。任何想要更好地使用Python数据模型的__getitem__实现都需要一个(显式)参数。在
a[c, d, e]
a[(c, d, e)]
a.__getitem__((c, d, e))
__getitem__
这就是为什么从[]内部的index解包值没有多大意义。a[*index]将给您一个SyntaxError,a.__getitem__(*index)将给您一个TypeError(因为您提供的参数太多)。在
[]
index
a[*index]
SyntaxError
a.__getitem__(*index)
TypeError
标准Python列表期望整型参数为__getitem__,但是numpy支持元组索引(numpy数组仍然只接受__getitem__的一个参数,但它可以是元组)。在
numpy
演示:
>>> import numpy as np >>> a = np.array([[1,2,3], [4,5,6]]) >>> a[(1,2)] 6
当然,你可以省略括号,因为
完全相同。在
您可以使用^{},它是标准库的一部分:
>>> a = [[1, 2, 3], ... [4, 5, 6]] >>> index = [1, 2] >>> import functools, operator >>> functools.reduce(operator.getitem, index, a) 6
或者,您可以编写自己的类来支持这种多维索引:
否则,仅使用列表而不使用循环或其他函数是不可能的。在
首先,
a[c, d, e]
等价于a[(c, d, e)]
,后者等价于a.__getitem__((c, d, e))
。注意双括号。任何想要更好地使用Python数据模型的__getitem__
实现都需要一个(显式)参数。在这就是为什么从
[]
内部的index
解包值没有多大意义。a[*index]
将给您一个SyntaxError
,a.__getitem__(*index)
将给您一个TypeError
(因为您提供的参数太多)。在标准Python列表期望整型参数为
__getitem__
,但是numpy
支持元组索引(numpy数组仍然只接受__getitem__
的一个参数,但它可以是元组)。在演示:
当然,你可以省略括号,因为
^{pr2}$完全相同。在
您可以使用^{} ,它是标准库的一部分:
或者,您可以编写自己的类来支持这种多维索引:
^{pr2}$否则,仅使用列表而不使用循环或其他函数是不可能的。在
相关问题 更多 >
编程相关推荐