Python:将列表理解列入x,y列表

Sam*_*cer 3 python list-comprehension

我正在使用两个范围在第二场比赛中放置牌,所以我创建了一个'tilemap'......

tilemap = [ [TILE for w in range(MAPWIDTH)] for h in range(MAPWIDTH)]
Run Code Online (Sandbox Code Playgroud)

这工作...现在我想附加一个名为'piecemap'的类的实例,它对应于tilemap.要做到这一点,我有一个名为Piece的类,看起来像这样......

class Piece():
   otherstuff = "string"
   location = [0,0] 
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使用列表推导将宽度范围中的"w"和高度范围中的"h"加载到"location"属性中?目前我的努力(不起作用)看起来像这样......

piecemap = [[Piece.location[0] for w in range(MAPWIDTH)],[Piece.location[1] for h in range(MAPHEIGHT)]
Run Code Online (Sandbox Code Playgroud)

我知道这是错的,但不知道如何做对!任何帮助?

Rob*_*obᵩ 5

class Piece():
   otherstuff = "string"
   location = [0,0] 
Run Code Online (Sandbox Code Playgroud)

这是一个非常奇怪的课程.你有阶级属性otherstufflocation,仿佛每一个Piece曾经创造会占据相同的位置.

相反,您可能需要实例属性,如下所示:

class Piece:
    def __init__(self, x, y, name="Unspecified"):
        self.location = [x,y]
        self.otherstuff = name
Run Code Online (Sandbox Code Playgroud)

然后你的列表理解如下:

tilemap = [ [Piece(w, h) for w in range(MAPWIDTH)] for h in range(MAPWIDTH)]
Run Code Online (Sandbox Code Playgroud)

  • 当然,在一个地方命名你的索引`h`和`w`,但在另一个地方命名`x`和`y`可能会导致你的索引顺序被反转,正如我在这里所做的那样. (2认同)