如何检查列表中的任何对象的值是否等于python中的变量?

时间:2015-02-14 17:24:48

标签: python

我有类字符的对象列表wchich有x和y属性。我有这个功能:

def printBoard(self):
    for y, row in enumerate(self.rows):
        for x, char in enumerate(row):
            if y == self.player.y and x == self.player.x:
                print(self.player.char, end='')
            else:
                print(char, end='')

        print()

它将游戏板打印到控制台。如果实际光标x,y等于玩家的x和y,则打印玩家的char。 我想遍历对象列表,而不仅仅是一个玩家实例 self.objects=[Character(x=0,y=2,char="O"), Character(x=2, y=5,char="Q")]

怎么做?我已经阅读了一些关于理解的内容,但这对我来说是一种黑魔法。

所以我的问题是:如何从单个if语句中检查列表中的任何对象的值是否等于变量?

解决

好的,我做到了,但是这个解决方案很丑陋:

def printBoard(self):
  for y, row in enumerate(self.rows):
        #print("Y: ",y,end='')
        for x, char in enumerate(row):
            #print(',',x,end='')
            try:
                print(self.whatObjectIsOnGivenXY(x, y).char, end='')
            except AttributeError:
                print(char,end='')
        print()
def whatObjectIsOnGivenXY(self,x1,y1):
    for y, row in enumerate(self.rows):
        for x, char in enumerate(row):
            if (x, y) == (x1, y1):
                for gameObject in self.objects:
                    if (gameObject.x, gameObject.y) == (x1,y1):
                        return gameObject
    return None

有没有更好的解决方案?

2 个答案:

答案 0 :(得分:0)

使用列表理解:

def equalCoordinates():
    matches = [i for i in my_list if (i.x, i.y) == mouse.pos] 
    return matches

答案 1 :(得分:0)

self.objects=[o for o in [Character(x=0,y=2,char="O"), Character(x=2, y=5,char="Q")] if o.x == 2 and o.y == 5 ]

将列表中的第二个对象分配给self.objects。

def whatObjectIsOnGivenXY(self,x1,y1):
    for y, row in enumerate(self.rows):
        for x in range(len(row)):
            if (x, y) == (x1, y1):
                return [gameObject for gameObject in self.objects if (gameObject.x, gameObject.y)==(x,y)]
    return None  

现在你得到了对象列表。