【问题标题】:2D list in python writing in every row instead of just oncepython中的二维列表在每一行而不是一次写入
【发布时间】:2017-03-17 02:23:35
【问题描述】:

我在 Python 中处理二维列表时遇到问题。我想在黑板中间写一个字。相反,我在每一行的中间都写了这个词。有人可以向我解释为什么这样做并为我提供解决方案吗?

row = []
board = []
n = 21
longest =  "WORD"
for x in range(0, n):
    row.append('')
for x in range(0, n):
    board.append(row)
midway = len(board)/2
for x in range(0, len(board)):
    if x == midway:
        for y in range(0, len(board)):
            if y >= midway and y < midway + len(longest):
                board[midway][y] = longest[y - midway]
print board

【问题讨论】:

    标签: python list multidimensional-array


    【解决方案1】:

    您使用row 重复构建board 的方式会导致更改出现在每一行上。采用稍微不同的方法来构建电路板,您的代码应该可以按预期工作。

    board = []
    n = 21
    longest =  "WORD"
    for x in range(0, n):
        board.append([''] * n)
    midway = len(board)/2
    for y in range(0, len(board)):
        if y >= midway and y < midway + len(longest):
           board[midway][y] = longest[y - midway]
    print board
    

    (你的外部循环是不必要的,所以它也被删除了。)

    【讨论】:

      【解决方案2】:

      我认为这与您在第 1 行中定义 row 然后将相同的 row 附加到 board 3 次有关。所以你没有3个不同的rows。您有 3 个对 SAME row 的引用。我认为这就是它正在做的事情,我认为这不是你想要的。

      【讨论】:

        【解决方案3】:

        原因是你追加了同一行来构建一个板,这段代码:

        for x in range(0, n):
            row.append('')
        for x in range(0, n):
            board.append(row)
        

        您确实想追加新行,但您总是添加对同一行的引用。这意味着您在内存中存储了指向同一位置的 n 个引用,因此您对其中一个进行更改,它会影响其他的。

        你可以像这样快速创建一个板子,这段代码也跑得更快

        board = [['']*n for _ in range(n)]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多