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

时间: 2024-10-09 08:24:26

Python 列表元素去重的3种方法的相关文章

python:列表的去重:两种方法的问题是:结果是没有保持原来的顺序。

列表的去重 1.使用set的特型,python的set和其他语言类似, 是一个无序不重复元素集 orgList = [1,0,3,7,7,5] #list()方法是把字符串str或元组转成数组 formatList = list(set(orgList)) print (formatList) 2.使用keys()方法 orgList = [1,0,3,7,7,5] #list()方法是把字符串str或元组转成数组 formatList = list({}.fromkeys(orgList).k

js中数组去重的几种方法

js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                         for(var i=0;i<arr.length;i++){                                 for(var j=i+1;j<arr.length;j++){                                         if(ar

Javascript数组去重的几种方法

Javascript数组去重的几种方法 新建空数组,通过for...of(ES6)循环遍历,通过indexOf判断元素是否在新数组中存在,将不存在的(indexOf(n)==-1)元素push到新数组中: let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_indexOf(originalArr){ let newArr = []; for(n of originalArr){ if(newArr.in

Knockout获取数组元素索引的2种方法,在MVC中实现

在遍历数组.集合的时候,通常要获取元素的索引,本篇体验使用Knockout获取索引的2种方法. 假设有这样的一个模型: namespace UseIndex.Models { public class Student { public int Id { get; set; } public string Name { get; set; } } } 在HomeController中,先模拟一个Student的集合,在投影出Name属性的集合,最后以Json返回给前台视图. using Syste

js+jquery动态设置/增加/删除/获取元素属性的两种方法集锦对比(动态onclick属性设置+动态title设置)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html140/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>

Python爬取网页的三种方法

# Python爬取网页的三种方法之一:  使用urllib或者urllib2模块的getparam方法 import urllib fopen1 = urllib.urlopen('http://www.baidu.com').info() fopen2 = urllib2.urlopen('http://www.sina.com').info() print fopen1.getparam('charset') print fopen2.getparam('charset') #----有些

「python」: arp脚本的两种方法

「python」: arp脚本的两种方法 第一种是使用arping工具: #!/usr/bin/env python import subprocess import sys import re def arping(ipaddress = "192.168.1.1"): p = subprocess.Popen("/usr/sbin/arping -c 2 %s" % ipaddress, shell = True, stdout = subprocess.PIP

DB2去重的几种方法

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 例如下表:table1 用户办理套餐的记录表,可看出,user_id=33333有两条完全重复的记录,user_id=11111的tc_name和open_date不一样 1.对于完全重复的记录,直接使用distinct 即可 select distinct user_id,name,tc_name,open_date from tabl

Python安装第三方库的4种方法

Python安装第三方库的4种方法 1.使用pip 大多数库都可以通过pip安装,安装方法为,在命令行窗口输入:pip install libName libName     -   为库名 某些库通过pip安装不了,可能是因为没有打包上传到pypi中,可以下载安装包之后离线安装,方法是:pip install libPath libPath  -   为本地安装包地址,这些安装包一般以whl为后缀名.表示python扩展包的windows环境下的二进制文件.有一个专门下载这种文件的地方http