【Python进阶】删除list里的重复元素的三种方法效率分析

来源:互联网 发布:姆希塔良2017数据 编辑:程序博客网 时间:2024/05/17 03:46
1. sorted(...)

    sorted(iterable, key=None, reverse=False) --> new sorted list      eg.  sorted(l, key = l.index),生成一个新的了list, 原list不变


2. sort(...)
    L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*   eg. l.sort(key = l.index), 返回一个新的list给原来的list

3. index(...)
    L.index(value, [start, [stop]]) -> integer -- return first index of value.   返回第一个value所在的index
    Raises ValueError if the value is not present.

4. pop(...)
    L.pop([index]) -> item -- remove and return item at index (default last).  remove参数index指向的value,返回的是value
    Raises IndexError if list is empty or index is out of range.

5.remove(...)
    L.remove(value) -> None -- remove first occurrence of value.   remove第一个value, 返回none
    Raises ValueError if the value is not present.

6. if  __name__ = '__main__'的作用:

模块是对象,并且所有的模块都有一个内置属性__name__,它的值取决于模块是如何应用的。如果import了这个模块,__name__通常为模块文件名,不带路径

或者扩展名。如果不import,像一个标准程序一样运行这个模块,__name__的值将是一个特别缺省的”__main__“


方法一:将列表排序后,从最后一个元素开始循环迭代列表,判断相邻的两个元素是否相等

有赋值,排序操作。由于Pyhton变量也是对象,中每迭代出一个与last_item不相等的元素后,都重新建立一个局部变量并丢弃原来的变量,需要消耗更多内存。

而且由于排序操作,相对位置被破坏了。

def sort_one(list):    list.sort()    length = len(list)    last_item = list[length -1 ]    for i in range(len(list) - 2, -1, -1):        if last_item == list[i]:            list.remove(last_item)        else:            last_item = list[i]if __name__ == '__main__':    sort_one(a)    print(a)
方法二: 建立一个临时列表,迭代循环出的元素如果不在临时列表里,就将其加入临时列表,最后返回临时列表

每次旨在原来的列表上增加一个索引和值,相比方法一效率更高

def sort_two(list):    list.sort()    temp_list = []    for value in list:        if value not in temp_list:            temp_list.append(value)    return temp_list    if __name__ == '__main__':    print(sort_two(a))


方法三:效率最高,使用set,好处是快速,坏处是打乱了列表的顺序,需要重新sort

def sort_three(list):    new_list = sorted(set(list))    return new_list   if __name__ == '__main__':    print(sort_three(a))



0 0
原创粉丝点击