首页 新闻 会员 周边 捐助

python中的杨辉三角问题

0
悬赏园豆:20 [已解决问题] 解决于 2016-05-04 20:03

实现杨辉三角:

          1
        1   1
      1   2   1
    1   3   3   1
  1   4   6   4   1
1   5   10  10  5   1

先来看输出结果:

[1]
[1, 1]
[1, 2, 2]   #问题在这,为什么最后一个元素是2?

再来看代码:

n=0
l=[1]
g=[1]
while n<3:
    print(g)
    l.append(0)
    g=l
    for i in range(len(l)):
        g[i]=l[i-1]+l[i]     #在这里出了问题,我的思路是:
                  #当n=2,i=0时,l=[1,1,0] g=[1,1,0]
                  #n=2 i=1 l=[1,1,0] g=[1,2,0]
                  #n=2 i=2 l=[1,1,0] g=[1,2,1] 但是!,实际上在这                  #一步中 l=[1,2,0],这是怎么回事?
l=g n+=1

 

求大神们解答!!!

 
MnCu的主页 MnCu | 初学一级 | 园豆:158
提问于:2016-05-04 17:03
< >
分享
最佳答案
1

在python中g=n这时只是一个内存指向,并不是你新定义出来一个变量,如果你想定义一个新变量,你应该copy一份出来,比如

from copy import copy

n = [1, 2]

g = copy(n)

收获园豆:10
Rich.T | 老鸟四级 |园豆:3440 | 2016-05-04 17:49

恩,谢谢啊!!

MnCu | 园豆:158 (初学一级) | 2016-05-04 20:02
其他回答(2)
0

我靠!我现在搞懂了!!

先看代码:

>>> n=[1]
>>> l=n
>>> l
[1]
>>> n=[4]
>>> l
[1]

在上面的代码中,n变了,l 没有变。

>>> n=[1,2]
>>> g=n
>>> g
[1, 2]
>>> n[1]=3
>>> g
[1, 3]

而这个代码中,n变了,g也跟着变了!! 

具体是怎么回事还没搞懂,可能这就是list[num]的一个特性或者bug?

MnCu | 园豆:158 (初学一级) | 2016-05-04 17:15
1

第一个例子和第二个不一样,并不是Bug

例子1:n=[4]后,l和n已经指向不同列表了

例子2:n[1]=3,修改的是同一个列表

收获园豆:10
jello chen | 园豆:7336 (大侠五级) | 2016-05-04 17:37

嗯,谢谢啊!!

支持(0) 反对(0) MnCu | 园豆:158 (初学一级) | 2016-05-04 20:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册