首页 > 解决方案 > 如何删除输出每行末尾的额外零?

问题描述

此代码生成一个帕斯卡三角形:

import pprint

def nextRow(cRow):
    cRow.append(0)
    return [cRow[m - 1] + cRow[m + 1] for m in range(len(cRow) - 1)]

def Pascal(n):
    row = [0, 0, 0, 0, 1, 0, 0, 0, 0]
    l = []

    for h in range(n):
        l.append(row)
        row = nextRow(row)

    return l

pprint.pprint(Pascal(5))

我正在尝试删除多余的零,而不仅仅是在代码末尾删除它们:

输出:

[[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 1, 0, 1, 0, 0, 0, 0],
 [0, 0, 1, 0, 2, 0, 1, 0, 0, 0],
 [0, 1, 0, 3, 0, 3, 0, 1, 0, 0],
 [1, 0, 4, 0, 6, 0, 4, 0, 1, 0]]

期望的输出:

[[0, 0, 0, 0, 1, 0, 0, 0, 0],
 [0, 0, 0, 1, 0, 1, 0, 0, 0],
 [0, 0, 1, 0, 2, 0, 1, 0, 0],
 [0, 1, 0, 3, 0, 3, 0, 1, 0],
 [1, 0, 4, 0, 6, 0, 4, 0, 1]]

标签: python

解决方案


您可以将计算结果保存在l没有row最后一个元素的情况下,l.append(row[:-1])而不是保存l.append(row)Pascal函数中。

import pprint


def nextRow(cRow):
    cRow.append(0)
    return [cRow[m - 1] + cRow[m + 1] for m in range(len(cRow) - 1)]


def Pascal(n):
    row = [0, 0, 0, 0, 1, 0, 0, 0, 0]
    l = []

    for h in range(n):
        l.append(row[:-1])
        row = nextRow(row)

    return l


pprint.pprint(Pascal(5))

推荐阅读