2015-05-17 75 views
0
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,生成帕斯卡三角形的第一个numRows。如何在python中改进此代码?

例如,假设= numRows行5, 返回

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

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

非常感谢!

+8

看起来更适合[codereview.stackexchange.com](http://codereview.stackexchange.com/) –

回答

1

你能避免使用多维数组,并通过分离主要功能有很多指标:

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 - 它是一个python! =)