代码在
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]]