使用for循环从列表列表返回特定列表

时间:2017-02-17 03:05:32

标签: python list python-3.x for-loop

我想使用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)

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])