0

我似乎在 python 中创建帕斯卡三角形时遇到了问题,我真的很沮丧没有找到问题。请帮忙。谢谢。

继承人的代码:

inpt = input("Enter levels: ")   #number of levels in a triangle
list1 = []
list2 = [1]

for a in range(inpt):
    list1.append(1)
    for x in range(a+1):
        if (x == 0 or x == a):
            list1[x]
        elif (x > 0 or x < a):
            list1[x] = list2[x] + list2[x-1]
    print list1
    list2 = list1

它打印出这样的东西:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 4, 1]
[1, 4, 8, 9, 1]
4

3 回答 3

4

list2 = list1您说的这两个名称list1list2引用了相同的列表。
要真正复制列表,您可以使用list2 = list1[:](或类似copy的模块。另请参阅此问题(“python list by value not by reference”)

for a in range(inpt):
    list1.append(1)
    for x in range(a+1):
        if (x == 0 or x == a):
            list1[x]
        elif (x > 0 or x < a):
            list1[x] = list2[x] + list2[x-1]
    print list1
    list2 = list1[:]
于 2014-09-02T10:48:54.107 回答
1

您可以简化代码。

for x in range(a+1)从 0 开始一直到a因为您正在使用a+1,所以您使用 if 检查来避免0,因此从范围开始并循环遍历a更有意义,从而消除了对任何检查的需要:1range(a)if/elif

for a in xrange(inpt):
    list1.append(1)
    for x in xrange(1, a):
        list1[x] = list2[x] + list2[x-1]
    print list1
    list2 = list1[:]
于 2014-09-02T13:48:23.413 回答
-1

我相信您需要深度复制或克隆您的列表而不是 list2=list1 因为这将使两个变量都指向同一个列表。请参阅如何克隆或复制列表?

于 2014-09-02T10:49:28.837 回答