我想使用for循环在列表列表中查找列表。
为什么它返回列表0而不是列表2?
def make_str_from_row(board, row_index):
""" (list of list of str, int) -> str
Return the characters from the row of the board with index row_index
as a single string.
>>> make_str_from_row([['H', 'O', 'U', 'S', 'E'], ['B', 'E', 'D'], ['C', 'H', 'E', 'E', 'S', 'E']], 2)
'CHEESE'
"""
letter = ''
line = ''
for row_index in board:
for letter in row_index:
line = line + letter
return line
make_str_from_row([['H', 'O', 'U', 'S', 'E'], ['B', 'E', 'D'], ['C', 'H', 'E', 'E', 'S', 'E']], 2)
答案 0 :(得分:2)
row_index
不是您认为的那样。在Python中,您正在使用的for循环语法会导致控件变量将元素存储在集合中(在此上下文中)。换句话说,您正在遍历board
中的每个子列表,其中对于每次迭代,row_index
将更新为指向下一个子列表。
你需要的是一次访问,然后你的内部for循环:
sub_list = board[row_index]
for letter in sub_list:
line = line + letter
return line
以下是等效的:
for letter in board[row_index]:
line = line + letter
return line
另一方面,由于你的函数是为了返回给定sub_list的串联String版本,你可以考虑单行解决方案......
return ''.join(board[row_index])
...连接board[row_index]
字符串中的字符。
join
被认为比+=
更有效,因为它避免了浪费的构造和丢弃子字符串。 (您为每个+=
创建一个完全不同的字符串。)特别是对于长字符串,join
是一个很好的解决方案。
答案 1 :(得分:0)
问题是你总是返回列表的第一个元素。请记住return
使功能立即完成。此外,您的变量letter
可以被删除。您不需要初始化它,因为它是for循环的一部分。最后,您的代码可能很简单:
def make_str_from_row(board, row_index):
""" (list of list of str, int) -> str
Return the characters from the row of the board with index row_index
as a single string.
>>> make_str_from_row([['H', 'O', 'U', 'S', 'E'], ['B', 'E', 'D'], ['C', 'H', 'E', 'E', 'S', 'E']], 2)
'CHEESE'
"""
return ''.join(board[row_index])