如何在Python中访问一个方阵的长度?

m2xkgtsf  于 2022-12-28  发布在  Python
关注(0)|答案(3)|浏览(158)

假设我有一个数组map[x][y],其中我不知道数组的高度和宽度,array.length()将返回总高度 * 宽度,但是如果我想知道高度和宽度各自是什么,这可以通过python内置的实用程序来实现吗?

z2acfund

z2acfund1#

我猜你是想在二维Map上编码某种游戏。
Python没有C或C++意义上的多维数组 (它们本身只是围绕一维数组的语法糖)。 相反,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操作符不生成listn新拷贝;相反,它将listreference 复制到n。更改其中一个list引用将更改所有引用。

0pizxfdo

0pizxfdo2#

array是一维数组。如果需要多维数组,请查看标准Python列表。请参见http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
注意,在列表的情况下,你可以得到列表的“高度”(“行数”),但是行不必包含相同数量的列,所以你不能直接得到宽度,你可以找到最短的行、最长的行、平均的行等等,但是你需要遍历列表来完成。
根据您正在做的事情,您可能会考虑使用numpy

vsaztqbk

vsaztqbk3#

免责声明:我根本不知道python,但我想我应该看一看:)
查看此page,您似乎在寻找map.ndim

    • 编辑**

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

    • 编辑2**

map.ndim在你的例子中是2,即你的数组的维数。map.shape将给你一个描述你的数组维数的整数元组。在你的例子中是2,2-所以你需要map.shape[1]作为你的数组的宽度。

相关问题