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?
3条答案
按热度按时间z2acfund1#
我猜你是想在二维Map上编码某种游戏。
Python没有C或C++意义上的多维数组 (它们本身只是围绕一维数组的语法糖)。 相反,Python有列表,它是严格的一维事物。
你可以通过创建一个包含其他列表的列表来伪造一个二维数组。
您可以通过以下方式获得宽度和高度:
只有当
map
的每个子列表长度相同时,也就是说,map
是一个矩形列表,Python才不会强制执行这个限制(为什么要强制执行?),所以你必须自己强制执行。如另一个答案所述,
numpy
具有针对数值数学优化的真正N维数组。旁注:注意列表解析
map = [ [None]*width for i in range(height)]
的使用,而不是以下内容:其具有意想不到的效果:
这是因为用于数组的
[list] * n
操作符不生成list
的n
新拷贝;相反,它将list
的 reference 复制到n
。更改其中一个list
引用将更改所有引用。0pizxfdo2#
array是一维数组。如果需要多维数组,请查看标准Python列表。请参见http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
注意,在列表的情况下,你可以得到列表的“高度”(“行数”),但是行不必包含相同数量的列,所以你不能直接得到宽度,你可以找到最短的行、最长的行、平均的行等等,但是你需要遍历列表来完成。
根据您正在做的事情,您可能会考虑使用numpy。
vsaztqbk3#
免责声明:我根本不知道python,但我想我应该看一看:)
查看此page,您似乎在寻找
map.ndim
嗯,看起来我偶然发现了一个叫NumPy的库
map.ndim
在你的例子中是2,即你的数组的维数。map.shape
将给你一个描述你的数组维数的整数元组。在你的例子中是2,2-所以你需要map.shape[1]
作为你的数组的宽度。