鱼C论坛

 找回密码
 立即注册
查看: 1651|回复: 5

[已解决]为什么代码打印出来是这样?

[复制链接]
发表于 2017-9-20 23:27:01 | 显示全部楼层 |阅读模式

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

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

x
#0
import random

member=['小甲鱼','迷途','黑影','已经','求无邪样','杀手古德']
for i in range(len(member)):
    if i%2==0:
        member.insert(i+1,random.randint(80,100))

print(member)
打印结果:
['小甲鱼', 84, '迷途', 93, '黑影', 99, '已经', '求无邪样', '杀手古德']
最后三个元素后面没有添加数字
最佳答案
2017-9-22 21:33:20
cbs 发表于 2017-9-22 19:00
大神,是因为一开始len(member)==5,所以 i 才到 5 就停止了吗?
后面我每次循环都调用一次len(member) ...

for循环可以看做一个特殊的函数,其数据结构是:栈。
栈是一个特殊的有序表。
没有对应的方法,去执行以后去改变循环条件的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-20 23:50:23 | 显示全部楼层
member.insert后改变了member列表的值,导至不能用原来的下标索引

  1. import random

  2. member=['小甲鱼','迷途','黑影','已经','求无邪样','杀手古德']
  3. for i,each in enumerate(member):
  4.     if i%2==0:
  5.         member.insert(i+1,random.randint(80,100))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 10:47:35 | 显示全部楼层
问题的确和ba21说的一样,在insert新数据后,列表的元素下表都已经发生了变化
想得到目标结果:
import random

member=['小甲鱼','迷途','黑影','已经','求无邪样','杀手古德']
l = []

for i in range(len(member)):
        l.append(member[i])
        l.append(random.randint(80,100))
print(l)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 17:03:02 | 显示全部楼层
本帖最后由 流浪1123 于 2017-9-21 17:15 编辑

因为insert()的插入就是结果的(蓝色部分)。值的变化引起了member列表的索引值的变化!(红色部分)
注意循环的条件:是[0, 1, 2, 3, 4, 5]
运行过程如下:

起始的nember=[]====> ['小甲鱼', '迷途', '黑影', '已经', '求无邪样', '杀手古德']


for 0 range(len(member)): [0, 1, 2, 3, 4, 5]
0 %2==0: 此时i值为: 0
member.insert( 1 随机数: 96
['小甲鱼', 96, '迷途', '黑影', '已经', '求无邪样', '杀手古德']


for 1 range(len(member)): [0, 1, 2, 3, 4, 5, 6]
1 i%2 != 0 没有被执行


for 2 range(len(member)): [0, 1, 2, 3, 4, 5, 6]
2 %2==0: 此时i值为: 2
member.insert( 3 随机数: 100
['小甲鱼', 96, '迷途', 100, '黑影', '已经', '求无邪样', '杀手古德']


for 3 range(len(member)): [0, 1, 2, 3, 4, 5, 6, 7]
3 i%2 != 0 没有被执行


for 4 range(len(member)): [0, 1, 2, 3, 4, 5, 6, 7]
4 %2==0: 此时i值为: 4
member.insert( 5 随机数: 99
['小甲鱼', 96, '迷途', 99, '黑影', 99, '已经', '求无邪样', '杀手古德']


for 5 range(len(member)): [0, 1, 2, 3, 4, 5, 6, 7, 8]
for 5 i%2 != 0 没有被执行

当到这个的时候:注意循环的条件:是[0, 1, 2, 3, 4, 5]。所以运行截止。

最后的member=[]====> ['小甲鱼', 96, '迷途', 99, '黑影', 99, '已经', '求无邪样', '杀手古德']

只要一结果的话,你可以直接:
就是把所有的位置给他留出来的!让他打印就好了!
  1. for i in range(len(member) * 2):
复制代码

  1. #0
  2. import random

  3. member=['小甲鱼','迷途','黑影','已经','求无邪样','杀手古德']
  4. for i in range(len(member)*2):
  5.     if i%2==0:
  6.         member.insert(i+1,random.randint(80,100))

  7. print(member)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-22 19:00:49 | 显示全部楼层
流浪1123 发表于 2017-9-21 17:03
因为insert()的插入就是结果的(蓝色部分)。值的变化引起了member列表的索引值的变化!(红色部分)
注意 ...

大神,是因为一开始len(member)==5,所以 i 才到 5 就停止了吗?
后面我每次循环都调用一次len(member)也不行吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 21:33:20 | 显示全部楼层    本楼为最佳答案   
cbs 发表于 2017-9-22 19:00
大神,是因为一开始len(member)==5,所以 i 才到 5 就停止了吗?
后面我每次循环都调用一次len(member) ...

for循环可以看做一个特殊的函数,其数据结构是:栈。
栈是一个特殊的有序表。
没有对应的方法,去执行以后去改变循环条件的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 01:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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