九州体育网 - 十年信誉网站

关于作者

Discuss / Python / 虽然过了,但是有个append和+的疑问

虽然过了,但是有个append和+的疑问

Topic source

范范也被占用了

#1 Created at ...
L = [1]
while True:
    yield L
    if len(L) > 1:
        temp_L = L
        L=[1]
        for flag,temp in enumerate(temp_L):
            if flag == len(temp_L)-1:
                break
            L = L+ [temp_L[flag] + temp_L[flag+1]]
    L = L + [1]

这个是自己写的可以胜利的,可是当把 L=L+ X 改成L.append(X)形式后输出显示没错,可是测试失败。 查到了append是在原链表添加,前者是新建一个链表,可是还是不明白为什么输出结果对,测试失败。

范范也被占用了

#2 Created at ...

补一下结果显示

[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, 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] 测试通过!

猪蹄子子

#3 Created at ...

复制list和给list再取一个名字的区别

西红柿蛋花

#4 Created at ...

L.append(1)是修改L指向的真实数组,第二次yield的时候把L改掉了,results数组里的第一个元素和第二个元素指向的都是L所指向的同一个内存地址,所以 results 的第一个和第二个元素都是一样的 你可以print你的results看一下,result的第一个元素是[1,1]而不是[1] 另外,建议不要直接用 list1 = list2 的方式来赋值数组,最好用切片或者list(list)的方式去赋值,这样两个list会指向不同的内存地址,修改的时候不会互相影响 因为:temp_L = L 相当于把指向列表L的内存地址赋给temp_L 修改temp_L的同时也就相当于修改了这个内存地址指向的真实的数组,那么此时L也被改掉了,修改L的同时也会修改temp_L


  • 1

Reply

WARNING: You are using an old browser that does not support HTML5. Please choose a modern browser (Chrome / Microsoft Edge / Firefox / Sarafi) to get a good experience.