三种要领删除列表中反复的元素及效率阐明!
要领一:
利用列表工具的sort()要领对列表举办排序,从最后一个元素开始轮回迭代列表,判定相邻的两元素是否是否相等!
def methodOne(list): list.sort() lenList = len(list) lastItem = list[lenList-1] for i in range(lenList-2,-1,-1): if list[i] == lastItem: list.remove(list[i]) else: lastItem = list[i] return list
要领二:
界说一个姑且列表,轮回迭代出的元素假如不在姑且表中,则插手,最后返回姑且列表!
def methodTwo(list): tempList = [] for i in list: if not i in tempList: tempList.append(i) return tempList
要领三:
lists=[20,12,34,12,24,34,55,27] print list(set(lists))
1、要领一相对要领二来说,有更多的特别操纵如:排序、赋值。因为在Python中,变量是不行变的,每迭代出一个元素较量不相等后的操纵是都是新成立一个局部变量并赋值而扬弃原变量,这需要耗损更多的内存!同时因为排序操纵,粉碎了相对位置。
2、要领二成立一个姑且列表举办操纵,而列表是可变的,每次追加元素都只是在原列表上增加一个索引及值,因而相对要领一来说效率会更高!
3、第三个要领无疑是这三种要领中效率最好的(无论是代码的简捷照旧运行效率):set()是内置的数据范例“荟萃范例”,它是无序的且值是独一项的!所以set() 执行的功效就是转为荟萃且直接去除了反复的元素,再list()则将荟萃又转回列表范例。
可是,set()是会粉碎了分列顺序,假如要保存排序,list(set(lists)) 可改为 sorted(set(lists),key=lists.index)