鱼C论坛

 找回密码
 立即注册
查看: 1424|回复: 6

[已解决]python关于在for中改变列表值为什么会出错?内存原理是什么?

[复制链接]
发表于 2018-4-3 19:39:11 | 显示全部楼层 |阅读模式

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

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

x
import random

list1 = [random.randint(0,1000) for i in range(50)]

for each in list1:
    if each % 2 == 0:
        del list1[each]
print(list1)
直接报索引分配出错,请问内存原理是什么?
最佳答案
2018-4-3 20:37:58
应该这样
import random

list1 = [random.randint(0,1000) for i in range(50)]

for i,each in enumerate(list1):
    if each % 2 == 0:
        del list1[i]
print(list1)

each 是列表中的元素,i 才是索引。
像你原来那样,比如你列表中有个元素的值是200,你这个列表只有50个元素,那 list[200] 肯定报索引分配错误啊,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-3 19:43:52 | 显示全部楼层
本帖最后由 塔利班 于 2018-4-3 20:31 编辑

each你使用的是遍历list1元素,不是索引值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-3 20:18:59 | 显示全部楼层
一个列表,你一边删,一边遍历,肯定会越界。
使用下面方法:

  1. import random

  2. list1 = [random.randint(0,1000) for i in range(50)]
  3. list2 = [i for i in list1 if i%2 != 0]
  4. print(list2)

  5. #或者

  6. list3 = []
  7. for each in list1:
  8.     if each % 2 != 0:
  9.         list3.append(each)

  10. print(list3)


复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-3 20:37:58 | 显示全部楼层    本楼为最佳答案   
应该这样
import random

list1 = [random.randint(0,1000) for i in range(50)]

for i,each in enumerate(list1):
    if each % 2 == 0:
        del list1[i]
print(list1)

each 是列表中的元素,i 才是索引。
像你原来那样,比如你列表中有个元素的值是200,你这个列表只有50个元素,那 list[200] 肯定报索引分配错误啊,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-3 20:41:40 | 显示全部楼层
_Anonymous 发表于 2018-4-3 20:37
应该这样
import random

删除元素,索引值就变了,有的元素就没判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-4 13:27:39 | 显示全部楼层
ba21 发表于 2018-4-3 20:18
一个列表,你一边删,一边遍历,肯定会越界。
使用下面方法:

懂了,原来del的是变量而不是数值,而且我把下标和元素搞混了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 09:09:07 | 显示全部楼层
塔利班 发表于 2018-4-3 20:41
删除元素,索引值就变了,有的元素就没判断

测试了一下貌似不会,应该是先遍历完一遍,再去逐个判断和删的,这样索引值就不会变
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-10 04:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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