Python 列表元素去重的3种方法

以前面试的时候遇到过这个问题,今天闲着整理了以下,大概想到以下三种方法。


<span style="font-size:18px;">class delect_duplicate:
    def method_set(self,mlist):
        print("method_set is called")
        print("before process mlist is", mlist)
        l2 = set(mlist)
        print("after processed by method_xunhuan, the mlist is",l2)
    def method_xunhuan(self,mlist):
        print("method_xunhuan is called")
        print("before process mlist is", mlist)
        if mlist:
            mlist.sort()
            last = mlist[-1]
            for i in range(len(mlist) - 2, -1, -1):
                if last == mlist[i]:
                    del mlist[i]
                else:
                    last = mlist[i]
        print("after processed by method_xunhuan, the mlist is",mlist)
    def method3(self,mlist):
        print("method3 is called")
        print("before process mlist is", mlist)
        temp = []
        [temp.append(i) for i in mlist if not i in temp]
        print("after processed by method3, the result is",temp)</span>

第一种方法直接用set方法,简单粗暴有效,但是因为太简单,往往不能满足面试官的,

第二种方法是对列表的元素排序后从后往前比较,去除相同元素,但是前两种方法都有一个缺点,就是处理后元素的位置改变了,

第三种方法是用两个列表进行处理,不改变元素的位置,测试代码如下:

<span style="font-size:18px;">if __name__ == '__main__':
    A = [1, 5, 4, 8, 9, 2, 4, 5, 1]
    B = [1, 5, 4, 8, 9, 2, 4, 5, 1]
    C = [1, 5, 4, 8, 9, 2, 4, 5, 1]
    s = delect_duplicate()
    s.method_set(A)
    s.method_xunhuan(B)
    s.method3(C)</span>

运行结果如下:

<span style="font-size:18px;">method_set is called
before process mlist is [1, 5, 4, 8, 9, 2, 4, 5, 1]
after processed by method_xunhuan, the mlist is {1, 2, 4, 5, 8, 9}
method_xunhuan is called
before process mlist is [1, 5, 4, 8, 9, 2, 4, 5, 1]
after processed by method_xunhuan, the mlist is [1, 2, 4, 5, 8, 9]
method3 is called
before process mlist is [1, 5, 4, 8, 9, 2, 4, 5, 1]
after processed by method3, the result is [1, 5, 4, 8, 9, 2]</span>

完整代码:https://github.com/wlseu/delectdumplicate





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值