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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值