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

时间:2015-10-28 18:06:35

标签: python list-comprehension

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

tilemap = [ [TILE for w in range(MAPWIDTH)] for h in range(MAPWIDTH)]

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

class Piece():
   otherstuff = "string"
   location = [0,0] 

我的问题是如何加载" w"宽度范围和" h"在高度范围内进入"位置"属性使用列表理解?目前我的努力(不起作用)看起来像这样......

piecemap = [[Piece.location[0] for w in range(MAPWIDTH)],[Piece.location[1] for h in range(MAPHEIGHT)]

我知道这是错的,但不知道如何做对!有什么帮助吗?

5 个答案:

答案 0 :(得分:5)

class Piece():
   otherstuff = "string"
   location = [0,0] 

这是一个非常奇怪的课程。您有类属性otherstufflocation,就好像每个创建的Piece都会占用相同的位置。

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

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

然后你的列表理解如下:

tilemap = [ [Piece(w, h) for w in range(MAPWIDTH)] for h in range(MAPWIDTH)]

答案 1 :(得分:2)

根据我的阅读,我假设位置是每个instance的属性(不是类属性)。 name属性(可能)也是如此。 因此,我会在创建此类对象时设置位置:

class Piece():
    otherstuff = "string"
    def __init__(self,x,y):
        self.location = [x, y]
        # self.otherstuff = name # add it to the parameters if that's the case

piecemap = [[Piece(w,h) for h in range(MAPWIDTH)] for w in range(MAPHEIGHT)]

答案 2 :(得分:1)

我不知道您需要的是什么类,但您可以使用Copying to output path C:\Users\Me\AppData\Local\Temp\PublishTemp\TestProject113 C:\TestInstalls\TestProject113\wrap\MyTestService\project.lock.json(1,0): Error : The expected lock file doesn't exist. Please run "dnu restore" to generate a new lock file. 函数检索所有位置:

zip

答案 3 :(得分:1)

你需要这样的东西:

>>> [[x,y] for x in range(3) for y in range(2)]
[[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]

在你的情况下,它可能是:

piecemap = [[Piece.location[0], Piece.location[1]] for w in range(MAPWIDTH)] for h in range(MAPHEIGHT)]

但我不确定你真正期待的是什么

答案 4 :(得分:1)

你不想要这样的东西:

tilemap = [ (w, h) for w in range(MAPWIDTH) for h in range(MAPWIDTH)]

MAPWIDTH = 3

  
    

[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1) ),(2,2)

  

然后你可以创建你的" Piece"对象