首页 > 解决方案 > 尝试使用 python 实现帕斯卡三角形时出现问题

问题描述

我试图在 python 中练习生成器来实现 Pascal 的三角形。这是我的代码。

def triangles():
    k = 1
    l = [1,]
    while True:
        if(k == 1):
            k += 1
            yield(l)
        elif(k == 2):
            k += 1 
            l.append(1)
            yield(l)
        else:
            mid = l.copy()
            for i in range(1,k-1):
                
                a = l[i-1] + l[i]
                mid[i] = a   
            mid.append(1)
            l = mid
            k += 1
            yield(mid)

当我做这样的事情时,一开始一切看起来都很好。这是测试代码。

n = 0
results = []
for t in triangles():
    results.append(t)
    n = n + 1
    print(t)
    if n == 10:
        break
print(results)

这是输出。

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
[[1, 1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1], [1, 7, 21, 35, 35, 21, 7, 1], [1, 8, 28, 56, 70, 56, 28, 8, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]]

应该是输出中的results前 10 行,这也是生成器每次运行的输出triangles。但是,第一个元素results 不是[1],而是[1,1]。我真的很困惑。当我创建一个列表 [[1]] 并将其附加到 [1,1] 时,我得到了 [[1], [1,1]]。一切看起来都很好。我不知道问题出在哪里。

标签: pythongenerator

解决方案


您实际上不需要函数elif中的部分triangle

def triangles():
    k = 1
    l = [1]
    while True:
        if(k == 1):
            k += 1
            yield(l)
        else:
            mid = l.copy()
            for i in range(1,k-1):
                
                a = l[i-1] + l[i]
                mid[i] = a   
            mid.append(1)
            l = mid
            k += 1
            yield(mid)
n = 0
results = []
for t in triangles():
    results.append(t)
    n = n + 1
    if n == 10:
        break
print(results)

推荐阅读