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

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打包教程))