Crossin的编程教室

标题: 每日一坑(二)去除重复python [打印本页]

作者: mickyliumo    时间: 2016-7-12 15:22
标题: 每日一坑(二)去除重复python
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

劳烦大神们帮帮小白!

作者: crossin先生    时间: 2016-7-13 11:04
直接导致的问题原因:
del(x) 只是删掉 x 这个变量,和你的 list 无关,你大概想用的是 list.remove(x)

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

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

其它的问题:
不要用 list 做变量名,这是列表类的关键字。
for i in range(len(list)) 这种写法不好,为什么不直接 for x in list
作者: mickyliumo    时间: 2016-7-13 19:38
确实会有下标越界的问题。受教了。我再改改试试

非常感谢




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5