首页 新闻 会员 周边 捐助

python list的一个小问题

0
悬赏园豆:5 [已解决问题] 解决于 2012-04-25 09:39

a=[1,2,3]

for x in a:

  if x>2:

       a.insert(0,-1)

为什么 会陷入死循环

另外,如果把代码改成

a=[1,2,3]

for x in a[:]:

  if x>2:

       a.insert(0,-1)

就不会出现死循环了。

这个a按理说与a[:]应该一样的

NashZhou的主页 NashZhou | 初学一级 | 园豆:40
提问于:2012-04-24 23:00
< >
分享
最佳答案
1

a 不等于 a[:]

object slice 返回一个单独的值,用代码说明一下:

li = [1,2,3]

sli = li[:]

li is sli   #this line will print False.(也就是说li 和 sli不是同一个对象)

 

也就第一次你用原生对象迭代,第二次你用slice的返回值迭代。

所以第一次,你Infinite Loop。第二次却不会(你没有操作slice后的返回值)。

收获园豆:5
Jerry Chou | 老鸟四级 |园豆:2642 | 2012-04-25 09:34

yes,原来a[:]只是a的一个拷贝,不会随着a的改变而改变。你说的很对

NashZhou | 园豆:40 (初学一级) | 2012-04-25 09:39
其他回答(1)
0

你想要实现什么功能,你上面用for对a进行遍历,但在最后又改变了a的值,这样a会无限地变长,永远都遍历不完

另外,你的程序有问题,应该是 a.inseert吧,不是a,insert

artwl | 园豆:16736 (专家六级) | 2012-04-24 23:29

我没有想实现什么功能,只不过学学而已,那个逗号打错了 是点号。

另外,如果把代码改成

a=[1,2,3]

for x in a[:]:

  if x>2:

       a.insert(0,-1)

就不会出现死循环了。

这个a按理说与a[:]应该一样的

支持(0) 反对(0) NashZhou | 园豆:40 (初学一级) | 2012-04-25 08:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册