设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 4220|回复: 2
打印 上一主题 下一主题

每日一坑(二)去除重复python

[复制链接]

1

主题

0

好友

9

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2016-7-12 15:22:24 |只看该作者 |倒序浏览
def delrepeat(list):
    newlist = []
    for i in range(len(list)):
        x = list[i]
        n = list.count(x)
        if n==1:
            newlist.append(x)
        else:
            del(x)
    newlist.sort()
    print (newlist)

各位大神小白求帮忙,我的想法是count这个list中有多少个元素,如果是一个就放到新的newlist,如果不是就删掉,但是这个程序最后的结果是重复的删掉了却没有放掉新的list,但是我不理解哪里错了……

因为我的思路是这样的,如果在[1,2,3,4,5,1]这个list中,1是重复的
那么在这个程序中,i=0的时候,发现list.count(1)=2,所以删掉了list[0],
但是当i=5的时候,发现list.count(5)=1,所以就要将list[5]写入newlist

劳烦大神们帮帮小白!
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2016-7-13 11:04:26 |只看该作者
直接导致的问题原因:
del(x) 只是删掉 x 这个变量,和你的 list 无关,你大概想用的是 list.remove(x)

但是,你这么改还是有问题。在遍历列表过程中去删除列表是个很不好的操作,会导致列表元素个数变少,然后下标越界。

所以建议你改下思路。可以判断一个元素是否在新列表中,如果不在就加进去,如果在就忽略。

其它的问题:
不要用 list 做变量名,这是列表类的关键字。
for i in range(len(list)) 这种写法不好,为什么不直接 for x in list
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

9

积分

新手上路

Rank: 1

板凳
发表于 2016-7-13 19:38:03 |只看该作者
确实会有下标越界的问题。受教了。我再改改试试

非常感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-3 16:29 , Processed in 0.017284 second(s), 25 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部