嵌套列表理解与 if 相结合
Nested list comprehensions combined with an if
我正在尝试遍历包含我的游戏字段 (TicTacToe) 的列表。此列表如下所示:
['X', '_', '_']
['O', 'X', '_']
['_', 'O', 'X']
我想生成一个包含所有 X 或 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]
但结果并不如预期。
教程和 Whosebug 无法帮助我理解嵌套列表的列表理解。也许有人可以告诉我正确的方法或给我指点一个好的教程。
你的循环的理解版本是
[(x,b) for (x,y) in enumerate(self.gameField)
for (b,c) in enumerate(y) if c=='X']
这是一个包含两个 for
子句的列表理解,而不是一个列表理解包含另一个列表理解。
假设您想要行的网格样式布局,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)]
我正在尝试遍历包含我的游戏字段 (TicTacToe) 的列表。此列表如下所示:
['X', '_', '_']
['O', 'X', '_']
['_', 'O', 'X']
我想生成一个包含所有 X 或 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]
但结果并不如预期。
教程和 Whosebug 无法帮助我理解嵌套列表的列表理解。也许有人可以告诉我正确的方法或给我指点一个好的教程。
你的循环的理解版本是
[(x,b) for (x,y) in enumerate(self.gameField)
for (b,c) in enumerate(y) if c=='X']
这是一个包含两个 for
子句的列表理解,而不是一个列表理解包含另一个列表理解。
假设您想要行的网格样式布局,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)]