美文网首页python
【Python】列表重复元素删除(附python打包教程)

【Python】列表重复元素删除(附python打包教程)

作者: Akalin_Lee | 来源:发表于2018-05-28 23:07 被阅读1次

    1 删除空元素

    python中删除元素有时会出现一些意外状况,比如删除空元素:

            for i in a:
                if i=='' :
                    a.remove(i)
    

    或者类似的一些版本:

      for index,i in enumerate(a):
          if len(a[index])==0:
            a.remove(a[index])
    

    对于空元素不相邻的情况是可以很好的工作的,但是对于空元素相邻的情况就会出现问题,例如对于:

    a=['','a','','b','','','','']
    

    执行第一段代码,结果如下:

    a= ['a', 'b', '', '']
    

    我们换一种方式,令:

    a=['a','abc','b','abc','c','d','e','f']
    

    执行代码:

    for index,i in enumerate(a):
        if len(a[index])<3:
            a.remove(a[index])
    

    结果:

    a=['abc', 'abc', 'd', 'f']
    

    根据这个结果很容易猜测出,在循环的时候如果一个元素删除,那么之后的元素的索引都会减少1,而在下一次循环的时候index会增加1,这么一来就有一个夹在中间的元素被忽略掉了,那么很自然的我们会将代码改成下面的样子:

    for index,i in enumerate(a):
        if len(a[index])<3:
            a.remove(a[index])
            index=index-1
    

    不幸的是,结果并没有改变:

    a=['abc', 'abc', 'd', 'f']
    

    个人猜测在其他代码中,比如java,这么做应该是有用的(没有尝试),但是在python中这么做是不可以的,在查阅了一些资料后发现,如果只是删除空格那么可以用如下表达:

    b=[x for x in a if x!='']
    

    这么做确实非常简洁,至少在删除指定字符的时候是一个不错的选择。然后针对索引的问题可以采用倒序的方式:

    a=['','a','','b','','','','']
    for i in range(len(a)-1,0,-1):
        if a[i]=='':
            a.remove(a[i])
    

    结果还是比较好的:

    a=['a', 'b']
    

    2 删除列表中的重复值

    那么在实际中除了删除空格有时候还需要删除指定元素,如果根据一开始的思路,代码应该是:

    for i in a:
        if a.count(i)>1:
            a.remove(i)
    

    同样,对于相邻的需要删除的值,仍然是有上面的问题的,这时候就要用一些其他的手段了:

    1. set()
    b=sorted(set(a),key=a.index) 
    

    采用这种方式,可以将a中重复元素去掉,同时顺序是按照元素在a中出现的顺序:

    a=['f','abc','c','abc','c','a','b','a']
    b=['f', 'abc', 'c', 'a', 'b']
    
    1. {}.fromkeys().keys()
    b={}.fromkeys(a).keys()
    

    结果:

    a=['f','abc','c','abc','c','a','b','a']
    b=dict_keys(['f', 'abc', 'c', 'a', 'b'])
    
    1. set()+sort()
    b=list(set(a))
    b.sort(key=a.index)
    

    和方法一基本相同

    1. 迭代
    b=[]
    for i in a:
        if not i in b:
            b.append(i)
    

    结果和一相同,更为朴素的一种做法

    1. 排序后手动比较相邻元素
    def sortlist(a):
        a.sort()
        last=a[-1]
        for i in range(len(a)-2,-1,-1):
            if a[i]==last:
                a.remove(a[i])
            else:
                last=a[i]
        return a
    

    和第一部分的最后一段代码想法是类似的,关键在于要先排序。


    3 python的打包

    安装
    方法一:
    直接通过pip安装

    pip install pyinstaller

    方法二:
    从github上下载源码,然后进入解压包目录,打开命令行:

    python setup.py install

    打包
    对于需要打包的.py文件,直接在所处位置打开命令行:

    pyinstaller -F a.py

    随后在当前目录的dist文件夹中就可找到打包后的可执行程序。

    Ref
    https://www.cnblogs.com/nzyjlr/p/4174145.html
    https://blog.csdn.net/mrlevo520/article/details/51840217

    相关文章

      网友评论

        本文标题:【Python】列表重复元素删除(附python打包教程)

        本文链接:https://www.haomeiwen.com/subject/twunjftx.html