是否有一个Python模块/配方(不是numpy)用于小游戏的2d数组

2024-10-01 15:37:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Pygame&Pyglet编写一些Pygame&Pyglet的小游戏。在

一个二维数组的类将非常方便。我用py2exe把游戏发给亲戚朋友,numpy太大了,它的大部分功能都不需要满足我的需求。在

你能给我推荐一个Python模块/方法吗。在

——希拉格

[编辑]: 列表列表将由MatrixFrog和zvoase使用,如下所述。但它相当原始。一个包含插入/删除行和列以及旋转/翻转数组的方法的类将使它变得非常简单和可重用。dict只适用于稀疏数组。在

谢谢你的想法。在


Tags: 模块方法功能numpy游戏编辑列表数组
3条回答

使用defaultdict怎么样?在

>>> import collections
>>> Matrix = lambda: collections.defaultdict(int)
>>> m = Matrix()
>>> m[3,2] = 6
>>> print m[3,4]   # deliberate typo :-)
0
>>> m[3,2] += 4
>>> print m[3,2]
10
>>> print m
defaultdict(<type 'int'>, {(3, 2): 10, (3, 4): 0})

由于底层dict使用元组作为键,因此支持1D、2D、3D、。。。矩阵。在

也许pyeuclid符合您的需要——(日期已定但可用)格式的文档是here,ReST格式的最新文档在pyeuclid源代码中是this text file(要自己格式化ReST文本,请使用the docutils)。在

最简单的方法就是使用嵌套列表:

>>> matrix = [[0] * num_cols] * num_rows
>>> matrix[i][j] = 'value' # row i, column j, value 'value'
>>> print repr(matrix[i][j])
'value'

或者,如果要处理稀疏矩阵(即有很多空值或零值的矩阵),那么使用嵌套字典可能更有效。在这种情况下,您可以实现setter和getter函数,这些函数将对矩阵进行操作,如下所示:

^{pr2}$

然后你可以这样使用它们:

>>> matrix = {}
>>> set_element(matrix, 2, 3, 'value') # row 2, column 3, value 'value'
>>> print matrix
{2: {3: 'value'}}
>>> print repr(get_element(matrix, 2, 3))
'value'

如果需要,可以实现一个实现这些方法的Matrix类,但这样做可能有点过头了:

class Matrix(object):
    def __init__(self, initmat=None, default=0):
        if initmat is None: initmat = {}
        self._mat = initmat
        self._default = default
    def __getitem__(self, pos):
        i, j = pos
        return self._mat.setdefault(i, {}).setdefault(j, self._default)  
    def __setitem__(self, pos, value):
        i, j = pos
        self._mat.setdefault(i, {})[j] = value
    def __repr__(self):
        return 'Matrix(%r, %r)' % (self._mat, self._default)

>>> m = Matrix()
>>> m[2,3] = 'value'
>>> print m[2,3]
'value'
>>> m
Matrix({2: {3: 'value'}}, 0)

相关问题 更多 >

    热门问题