Disclaimer:初学者,自学Python用户。在
ndarray的一个相当酷的特性是它们能够接受整数元组作为索引(例如myNDArray[(1,2)] == myNDArray[1][2]
)。这允许我将索引保留为变量(例如indicesTuple),直到脚本确定要使用ndarray的哪个部分,在这种情况下,变量被指定为整数的元组并用于访问ndarray的一部分(例如myNDArray[indicesTuple]
)。使用变量的实用性在于,元组的长度可以根据ndarray的维度而变化。在
但是,这限制了我处理数值数组。我尝试过使用列表,但是它们不能接受元组作为索引(例如,myList[(1,2)]
会出错)。有没有一种方法可以像函数参数那样“展开”列表索引的元组?或者更简单或更有效的方法?在
更新:天哪,我忘了这个存在。基本上,我最终了解到可以使用参数dtype=object初始化ndarray,这允许ndarray包含多种类型的Python对象,就像一个列表。至于访问列表,正如一位评论者所指出的,我可以使用for循环遍历变量indicesTuple来访问列表中越来越多的嵌套元素。对于就地编辑,请参阅已接受的评论,真的做了额外的努力。在
Python没有多维列表,因此
myList[(1,2)]
只能被认为是(myList[1], myList[2])
的快捷方式(这有时会非常方便,尽管可以使用import operator; x = operator.itemgetter(1,2)(myList)
来完成相同的操作)。在如果你的
myList
看起来像那么
myList[(1,2)]
将不起作用(或者说有意义),因为myList
不是二维列表:它是一个包含列表引用的列表。使用myList[1][2]
是因为第一个索引myList[1]
返回对["a", "b", "c"]
的引用,第二个索引[2]
将得到"c"
。在稍微相关的是,您可以使用dictionary精确地模拟稀疏数组,方法是使用元组作为默认dict的键
^{pr2}$任何其他试图用作键的元组都将返回空字符串。这不是一个完美的模拟,因为如果不使用
假设您有一个
(i,j)
索引的列表以及一些你想要索引的2D列表
^{pr2}$您可以使用下面的列表理解来获得这些元素
那么你的索引可以是你想要的。它们将在列表理解中解包,并用作列表索引。对于您的特定应用程序,我们必须了解索引变量的来源,但这是基本思想。在
我把你的问题解释为:
我不知道有什么内置的方法可以做到这一点,但是您可以编写一个方法来迭代地挖掘列表,直到到达最里面的值为止。在
结果:
^{pr2}$您也可以使用
reduce
在一行中完成此操作,尽管读者不太清楚您要实现的目标。在(*如果您使用的是3.X,则需要从
functools
导入reduce
。所以,两条线。)如果要在N维列表中设置值,请使用
get
访问列表的第二个最深级别,并将其赋值。在相关问题 更多 >
编程相关推荐