您的位置:首页 > 编程语言 > Python开发

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

2015-05-30 23:16 645 查看
在列表去重中,根据其他语言的经验,比较容易想到的方式就是迭代删除以及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 originalList
print 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']
在以上去重方法中,第一种方式简洁高效,但是由于进行了排序,所以原有列表顺序被打乱。

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

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

第五种方式,临时变量消耗内存,效率较差。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: