鱼C论坛

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

[已解决]排序去重问题,没想明白,反向比较成功,正向比较报错,没整明白?

[复制链接]
发表于 2017-8-8 23:21:45 | 显示全部楼层 |阅读模式

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

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

x
代码一,从列表最后一个向前比较,如果一样就删除,不一样就复制给last,再向前比较
这样正常排出来

代码二,从前向后比较,道理一样,但就是不行,报IndexError: list index out of range
我看来看去没有超出范围啊?请高手帮忙看看到底问题在哪里

代码一:
a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a.sort()
last = a[-1]
for i in range(len(a)-2,-1,-1):
    if last == a[i]:
        del a[i]
    else:
        last = a[i]
print(a)


代码二:
a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a.sort()
first = a[0]
for i in range(1,len(a)):
    if first == a[i]:
        del a[i]
    else:
        first = a[i]
print(a)
最佳答案
2017-8-9 08:54:07
本帖最后由 冬雪雪冬 于 2017-8-9 08:59 编辑

因为删除元素后,a的总元素数变少了,而循环仍是range(1,len(a)):,这样就会越界。
其实在循环中增减元素的方法都不是最佳的办法,不注意的话容易出错,可以另生成新列表来解决次问题。
  1. a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
  2. a.sort()
  3. b = [a[0]]
  4. first = a[0]
  5. for i in range(1,len(a)):
  6.     if first != a[i]:
  7.         b.append(a[i])
  8.    
  9.     first = a[i]
  10. print(b)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-9 08:54:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 冬雪雪冬 于 2017-8-9 08:59 编辑

因为删除元素后,a的总元素数变少了,而循环仍是range(1,len(a)):,这样就会越界。
其实在循环中增减元素的方法都不是最佳的办法,不注意的话容易出错,可以另生成新列表来解决次问题。
  1. a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
  2. a.sort()
  3. b = [a[0]]
  4. first = a[0]
  5. for i in range(1,len(a)):
  6.     if first != a[i]:
  7.         b.append(a[i])
  8.    
  9.     first = a[i]
  10. print(b)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-9 09:00:34 | 显示全部楼层
更简单的去重是利用集合。
  1. a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
  2. a= sorted(list(set(a)))
  3. print(a)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-9 09:46:48 | 显示全部楼层
代码一: 是从后面开始删,不会越界;list的数量只会跟着你range倒数后的数量减少
代码二: 是从前面开始删,会导至越界;list的数量不停的减少,range的数量没变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-9 12:26:34 | 显示全部楼层
谢谢各位高手不吝赐教,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 23:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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