2015-05-17 71 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! =)