2015-05-17 2 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 - это питон! =)

Смежные вопросы