Python删除列表重复数据以及效率问题

来源:互联网 发布:停车源码 编辑:程序博客网 时间:2024/06/05 05:18

在列表去重中,根据其他语言的经验,比较容易想到的方式就是迭代删除以及set()方法。

列表总结起来处理无外乎 循环,排序,添加移除元素等操作,所以围绕这几方面考虑即可。

#coding=utf-8'''Created on 2015年5月30日@author: frozen cloud'''#原始列表originalList = ['python','A','B','C','D','E','A','B','C','F']#使用set()方法,生成一个无序不重复元素集,在海量数据去重问题中set的效率高于hash#sorted()方法有四个参数:sorted(iterable, cmp=None, key=None, reverse=False) #iterable迭代器,key列表元素的某属性作为关键字,cmp比较,比较的内容由key决定#reverse排序规则,正序、反序,返回值为与iterable相同类型的排序结果list1 = sorted(set(originalList),key = originalList.index)print list1#迭代list2 = []for i in originalList:    if not i in list2:        list2.append(i)print list2#集合转为列表,然后按照index排序list3 = list(set(originalList))list3.sort(key=originalList.index)print list3#keys()方法返回字典的所有键list4 = {}.fromkeys(originalList).keys()#转化为字典print {}.fromkeys(originalList)print list4#排序比较相邻元素,删除重复项def sortlist(originalList):    originalList.sort()    last = originalList[-1]    for i in range(len(originalList)-2,-1,-1):        if originalList[i] == last:            originalList.remove(originalList[i])        else:            last=originalList[i]    return originalListprint sortlist(originalList)
一次性运行结果如下:

['python', 'A', 'B', 'C', 'D', 'E', 'F']['python', 'A', 'B', 'C', 'D', 'E', 'F']['python', 'A', 'B', 'C', 'D', 'E', 'F']{'A': None, 'C': None, 'B': None, 'E': None, 'D': None, 'F': None, 'python': None}['A', 'C', 'B', 'E', 'D', 'F', 'python']['A', 'B', 'C', 'D', 'E', 'F', 'python']
在以上去重方法中,第一种方式简洁高效,但是由于进行了排序,所以原有列表顺序被打乱。

第二种方式,重新建立列表添加数据,逻辑清晰,效率也很不错。

第四种方式,比第一种方式多了一步转化,必然效率不如第一种。

第五种方式,临时变量消耗内存,效率较差。

0 0
原创粉丝点击