【问题标题】:Return specific list, from list of lists, using for loop使用 for 循环从列表列表中返回特定列表
【发布时间】:2017-02-17 03:05:32
【问题描述】:

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

【问题讨论】:

  • 摆脱你的外循环。为您的内部循环执行for letter in board[row_index]:。或者摆脱所有循环,只使用return ''.join(board[row_index])
  • 感谢@StevenRumbalski 非常清晰、简洁的解释!

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


【解决方案1】:

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 的串联字符串版本,您可以考虑单行解决方案...

return ''.join(board[row_index])

...连接board[row_index] 处的字符串中的字符。 join 被认为比+= 更有效,因为它避免了子字符串的浪费构造和丢弃。 (您为每个+= 创建一个完全不同的字符串。)特别是对于长字符串,join 是一个很好的解决方案。

【讨论】:

  • 感谢@synchronizer!我对一件事有点困惑。为什么函数返回子列表[0]。如果函数正在遍历每个子列表,为什么它不返回所有子列表?谢谢!
  • @sim 不客气。为了回答您的问题,该函数仅将子列表 0 作为字符串重新运行,因为您在循环中过早返回。也就是说,在循环有机会从sub_lists 的其余部分追加字符之前,您在第一次迭代结束时返回。 (虽然这是不受欢迎的行为)。这有帮助吗?
  • 太棒了!头痛消除! :D
【解决方案2】:

问题是您总是返回列表的第一个元素。请记住,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])

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2013-07-20
    • 2019-05-08
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多