如何在python中改进此代码?

时间:2015-05-17 10:03:25

标签: python

def generate(self, numRows):
        if numRows == 0:
            return []
        if numRows == 1:
            return [[1],]
        a = [[0]*num for num in xrange(1, numRows+1)]
        a[0] = [1]
        for i in xrange(1, numRows):
            a[i][0], a[i][i] = 1, 1
            for j in xrange(1, len(a[i])-1):
                a[i][j] = a[i-1][j] + a[i-1][j-1]
        return a

给定numRows,生成Pascal三角形的第一个numRows。

例如,给定numRows = 5, 返回

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

我是一名编程新手,并尝试练习我的编码能力。我希望你可以首先根据我的代码改进我的代码,而不是简单地重写它。此外,还欢迎您以更整洁的方式提供自己的代码。

非常感谢你!

1 个答案:

答案 0 :(得分:1)

通过分离main函数,可以避免使用多维数组和大量索引:

def _generate_row (row_number, prev_row):
    if row_number == 1:
        return [1]

    row_data = [0] + prev_row + [0]
    return [sum(row_data[a:a+2]) for a in xrange(0, len(row_data)-1)]

def generate(num_rows):
    prev_row = None
    for i in xrange(1, num_rows+1):
        prev_row = _generate_row(i, prev_row)
        yield prev_row

print list(generate(5))

下一步,您可以优化行生成 - 它是对称的,因此您不需要通过xrange(len(a [i]) - 1),只需要它的一半。

并使用snake_case - 它是一个蟒蛇! =)