鱼C论坛

 找回密码
 立即注册
查看: 1475|回复: 4

[已解决]这个for循环为什么输出的不是654321,用while list1:就可以

[复制链接]
发表于 2017-11-26 17:29:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
list1=[1,2,3,4,5,6]
b=''
for i in list1:
    b+=str(list1.pop())
print(b)
最佳答案
2017-11-26 18:25:50
pop()方法会改变列表。这段代码的整个过程如下
第一次循环:
pop() 方法弹出了 6  list1 列表变成了[1, 2, 3, 4, 5]      b 这个时候 == 6      i 指向 1

第二次循环:
pop() 方法弹出了 5  list1 列表变成了[1, 2, 3, 4]          b 这个时候 == 65     i 指向 2

第三次循环:
pop() 方法弹出了 4  list1 列表变成了[1, 2, 3]          b 这个时候 == 654      i 指向 3

然后这个时候就退出循环了。因为 list1 后面三个元素已经被移除出列表了。因此输出结果就是:654

而你用while循环能得到正确答案,就是因为整个循环条件不依赖于 list1 列表本身。 如果要用for循环得到正确输出,需要如下调整:
   list1 = [1, 2, 3, 4, 5, 6]
   b = ""
   for i in range(len(list1)):
       b += str(list1.pop())
   print(b)  

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-26 18:02:24 | 显示全部楼层
边删边取,list1早就是不之前的list1了。
直接看代码:
  1. list1=[1,2,3,4,5,6]
  2. b=''
  3. for i in range(len(list1)):
  4.     b+=str(list1.pop())
  5. print(b)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 18:05:40 From FishC Mobile | 显示全部楼层
pop操作是对列表本身操作,用for的话,in后面的列表元素个数一直在变化,所以不能正确取到所有元素,也正因为如此,用while就刚刚好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 18:25:50 | 显示全部楼层    本楼为最佳答案   
pop()方法会改变列表。这段代码的整个过程如下
第一次循环:
pop() 方法弹出了 6  list1 列表变成了[1, 2, 3, 4, 5]      b 这个时候 == 6      i 指向 1

第二次循环:
pop() 方法弹出了 5  list1 列表变成了[1, 2, 3, 4]          b 这个时候 == 65     i 指向 2

第三次循环:
pop() 方法弹出了 4  list1 列表变成了[1, 2, 3]          b 这个时候 == 654      i 指向 3

然后这个时候就退出循环了。因为 list1 后面三个元素已经被移除出列表了。因此输出结果就是:654

而你用while循环能得到正确答案,就是因为整个循环条件不依赖于 list1 列表本身。 如果要用for循环得到正确输出,需要如下调整:
   list1 = [1, 2, 3, 4, 5, 6]
   b = ""
   for i in range(len(list1)):
       b += str(list1.pop())
   print(b)  

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 18:49:36 From FishC Mobile | 显示全部楼层
又学习了,大神见解就是厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表