如何在 Python 中访问方形数组的长度



假设我有一个数组映射[x][y],我不知道数组的高度或宽度。 array.length(( 将返回整体高度 *宽度,但是如果我想知道高度和宽度独立是什么怎么办?这可以通过python内置实用程序吗?

我想你正在尝试在二维地图上编写某种游戏。

Python 没有 C 或 C++ 意义上的多维数组(它们本身只是围绕 1D 数组的语法糖(。相反,Python有列表,这是一个严格的一维事务。

您可以通过创建包含其他列表的列表来伪造二维数组。这样:

width = 10
height = 10
map = [ [None]*width for i in range(height) ]

您可以通过以下方式获得宽度和高度:

height = len(map)
width = len(map[0])

仅当map的每个子列表的长度相同时,即如果map是列表的矩形列表,这才会给出预期的结果。Python不会为你强制执行这个限制(为什么会这样?(,所以你必须自己强制执行。

如另一个答案所述,numpy具有针对数值数学优化的真正 N 维数组。


旁注:请注意使用列表推导map = [ [None]*width for i in range(height)],而不是以下内容:

map = [ [None]*width ] * height

这会产生意想不到的效果:

>>> a = [ [0] * 3 ] * 3 #create a 3x3 array of zeroes
>>> a
[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]
>>> a[1][1] = 9 #change the number in the middle of the grid to '9'
>>> a
[[0, 9, 0],   # wtf?
 [0, 9, 0],
 [0, 9, 0]]   # wtf?

这是因为数组的[list] * n运算符不会创建list n的新副本;相反,它会创建对list引用的n副本。更改其中一个list引用将更改所有引用。

免责声明:我根本不了解python,但我想我会看看:)

查看此页面,您似乎正在追求map.ndim

编辑

嗯,看起来我偶然发现了一个名为 NumPy 的库

编辑 2

在您的情况下,map.ndim将是 2,即数组中的维数。 map.shape将为您提供一个整数元组,用于描述数组的维度。在您的例子中 2,2 - 所以你需要map.shape[1]数组的宽度。

数组是一个单维数组。如果你想要多维,请查看标准的 Python 列表。 见 http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange

请注意,在列表的情况下,您可以获取列表的"高度"("行数"(,但行不必包含相同数量的列,因此您无法直接获取宽度。 您可以找到最短的行、最长的行、平均的行等,但您需要遍历列表才能做到这一点。

根据您正在做的事情,您可能会考虑使用 numpy。

最新更新