井字游戏,其中棋盘表示为[['x','x','x'],['','',''], ['','','']]
我们想找出船上所有空白的方块。板上空的正方形位置将作为(行,列)元组返回。
完成函数empty_squares(board),该函数返回元组列表,其中每个元组是空正方形的(行,列)。
这是我到目前为止所拥有的,它返回所有平方的元组,但是我只想要空的元组。
def empty_squares(board):
check = ' '
target_cell_list = []
for i in range(len(board)):
for j in range(len(board[i])):
target_cell_list.append((i, j))
return target_cell_list
答案 0 :(得分:0)
def empty_squares(board):
check = ' '
target_cell_list = []
for i in range(len(board)):
for j in range(len(board[i])):
if board[i][j] == " ":
target_cell_list.append((i, j))
return target_cell_list
答案 1 :(得分:0)
您还可以使用enumerate
进行简单的列表理解:
l = [['x','x','x'],
['','',''],
['','','']]
# r = [(x[0],y[0]) for x in enumerate(l) for y in enumerate(x[1]) if y[1] =='']
# More understandable way,suggested by Mr.MisterMiyagi.
r = [(x, y) for x, row in enumerate(l) for y, field in enumerate(row) if field == '']
# [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
或者,如果您要创建一个函数来执行此操作,则可以定义一个函数:
l = [['x','x','x'],
['','',''],
['','','']]
def empty_squares():
return [(x, y) for x, row in enumerate(l) for y, field in enumerate(row) if field == '']
empty_squares(l)
# [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
答案 2 :(得分:0)
您可以略微更改您的方法,使其更具“ pythonic”性。避免嵌套的for循环,您可以将列表理解与内置的enumerate
语句一起使用。因此empty_sqares
可能看起来像这样:
def empty_sqares(board):
return [(row_idx, col_idx) for row_idx, row in enumerate(board)
for col_idx, item in enumerate(row) if item == ' ']
弄清enumerate
的作用是最重要的想法。简而言之,它遍历iterable
(例如,列表,列表列表,对象列表等),并为每个元素返回一个元组,该元组包含一个计数(从起始值开始,默认为0)以及从迭代获得的值。可迭代的。来源:https://docs.python.org/3/library/functions.html#enumerate
所以代码中发生了什么
for row_idx, row in enumerate(board)
遍历board
中的行。因为board
(行)的项是列表,所以enumerate(board)
的连续结果是行索引(row_idx
)和行内容(row
,它是字符串列表)。因此,例如,enumerate(board)
的第一个“迭代”结果将是:row_idx = 0
row = ['x', 'x', 'x']
。for col_idx, item in enumerate(row)
遍历row
,选择row
的每个元素并将其分配给item
。因此,例如,enumerate(row)
的第一个“迭代”结果将是:col_idx = 0
item = 'x'
。if item == ' '
执行检查,如果选取的字符(在您的情况下,您有两个选择'x'
'或' '
)是否等于单个空格... (row_idx, col_idx)
。[..]
中,以组成元组的 list 。但是请记住,只有满足上述条件时,才会在结果中附加新的元组。