如何使用python打印pascal三角形



代码在

def pascal(p):
res = [[0 for i in range(p)] for i in range(p)]
for i in range(p):
res.append((11**i))
return res
p= 3
pascal(p)

我的out是[[0, 0, 0], [0, 0, 0], [0, 0, 0], 1, 11, 121]

预计

[[1, 0, 0], [1, 1, 0], [1, 2, 1]]

pascal的三角形是11的乘法,将split()方法将在这里工作

为什么不通过计算数字然后将其转换为字符串通过p对其进行校验然后将int映射到它:

def pascal(p):
return [list(map(int, str(11**i).ljust(p, '0'))) for i in range(p)]

>>> pascal(3)
[[1, 0, 0], [1, 1, 0], [1, 2, 1]]
>>> pascal(9)
[[1, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0], [1, 2, 1, 0, 0, 0, 0, 0, 0], [1, 3, 3, 1, 0, 0, 0, 0, 0], [1, 4, 6, 4, 1, 0, 0, 0, 0], [1, 6, 1, 0, 5, 1, 0, 0, 0], [1, 7, 7, 1, 5, 6, 1, 0, 0], [1, 9, 4, 8, 7, 1, 7, 1, 0], [2, 1, 4, 3, 5, 8, 8, 8, 1]]

  • 不需要数组初始化
  • 你需要建立一个值填充零,直到p
  • 的大小
  • 在每个char上分割字符串=>list('abcd') == ['a', 'b', 'c', 'd']
def pascal(p):
res = []
for i in range(p):
row = str(11 ** i).ljust(p, '0')
res.append(list(row))
return res
print(pascal(3))  
# [['1', '0', '0'], ['1', '1', '0'], ['1', '2', '1']]
print(pascal(6))
# [['1', '0', '0', '0', '0', '0'],
#  ['1', '1', '0', '0', '0', '0'],
#  ['1', '2', '1', '0', '0', '0'],
#  ['1', '3', '3', '1', '0', '0'],
#  ['1', '4', '6', '4', '1', '0'],
#  ['1', '6', '1', '0', '5', '1']]

等效的列表推导式

def pascal(p):
return [list(str(11 ** i).ljust(p, '0')) for i in range(p)]

不需要生成空数组

def pascal(p):
res = []
for i in range(p):
l = [int(d) for d in str(11 ** i)]
l += [0] * (p - len(l))
res.append(l) #append variable 
return res
p = 3
print(pascal(p))

输出:

[[1, 0, 0], [1, 1, 0], [1, 2, 1]]