结合i的嵌套列表理解

2024-05-31 23:30:11 发布

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

我正在尝试循环浏览一个包含我的游戏场(TicTacToe)的列表。此列表如下所示:

['X', '_', '_']
['O', 'X', '_']
['_', 'O', 'X']

我想生成一个包含所有Xs或Os的索引的列表。我的功能是这样的:

indicies = []
for x,y in enumerate(self.gameField):
    for b,c in enumerate(y):
        if c == 'X':
            indicies.append((x,b))

这是很好的工作,但我想用列表理解做同样的事情。我想,这可能有用:

indicies = [[(x,b) for b,c in enumerate(y) if c == 'X'] for x,y in enumerate(self.gameField)][0]

但结果并不像预期的那样。你知道吗

教程和StackOverflow不能帮助我理解嵌套列表的列表理解。也许有人能告诉我正确的方法或者给我一个好的指导。你知道吗


Tags: inself功能列表forifos事情
2条回答

假设您想要一个网格样式的行、列索引的x和o布局,您可以这样做

grid = [
    ['X', '_', '_'],
    ['O', 'X', '_'],
    ['_', 'O', 'X']
]

x_indicies = [(ir,i) for ir, row in enumerate(grid) for i, v in enumerate(row) if v == 'X']
o_indicies = [(ir,i) for ir, row in enumerate(grid) for i, v in enumerate(row) if v == 'O']
print(x_indicies, o_indicies, sep="\n")

输出

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

你的循环的理解版本是

[(x,b) for (x,y) in enumerate(self.gameField)
     for (b,c) in enumerate(y) if c=='X']

这是一个包含两个for子句的列表理解,而不是另一个列表理解中的一个列表理解。你知道吗

相关问题 更多 >