【问题标题】:Extra zeros appear at the end of existing items when appending new lists to a list将新列表附加到列表时,额外的零出现在现有项目的末尾
【发布时间】:2022-06-22 23:53:38
【问题描述】:

我正在尝试解决 leetcode 上的帕斯卡三角形问题:“返回给定数量的帕斯卡三角形行”。我定义了一个函数getNextRow(row),它计算给定当前行的下一行,然后调用它一定次数并将这些行附加到我的结果列表中。由于某种原因,每次我添加新行时,前一行的末尾都会出现额外的零。

例如 输入:5 #5 rows needed

输出:[[1,0],[1,1,0],[1,2,1,0],[1,3,3,1,0],[1,4,6,4,1]]

预期输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

def getNextRow(row):
    res = [1]
    if len(row) == 0:
        return res
    row.append(0)
    for i in range(len(row) - 1):
        res.append(row[i] + row[i+1])
    return res


def generate(numRows):
    pascal = [] #Empty resulting triangle
    currentRow = []
    num = 0 #Counter
    while num < numRows:
        currentRow = getNextRow(currentRow)
        pascal.append(currentRow)
        num += 1
    return pascal
                
if __name__ == '__main__':
    print(generate(5))

【问题讨论】:

  • row.append(0) 正在将0 添加到行中。

标签: python python-3.x list append pascals-triangle


【解决方案1】:

这里的问题是因为您在每次迭代中重用变量currentRow。在getNextRow 函数的第四行中,您将0 附加到传递给变量的行。这是直接引用内存中的currentRow 变量,因此在将currentRow 添加到pascal 列表之前进行更改。要解决此问题,您可以在将 currentRow 添加到 pascal 列表之前复制它,例如:

pascal.append(currentRow.copy())

或复制row 变量到getNextRow 中,如下所示:

def getNextRow(row):
    row = row.copy()

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 2021-08-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    相关资源
    最近更新 更多