1 刪除空元素
python中刪除元素有時會出現(xiàn)一些意外狀況苛让,比如刪除空元素:
for i in a:
if i=='' :
a.remove(i)
或者類似的一些版本:
for index,i in enumerate(a):
if len(a[index])==0:
a.remove(a[index])
對于空元素不相鄰的情況是可以很好的工作的伊滋,但是對于空元素相鄰的情況就會出現(xiàn)問題,例如對于:
a=['','a','','b','','','','']
執(zhí)行第一段代碼,結(jié)果如下:
a= ['a', 'b', '', '']
我們換一種方式,令:
a=['a','abc','b','abc','c','d','e','f']
執(zhí)行代碼:
for index,i in enumerate(a):
if len(a[index])<3:
a.remove(a[index])
結(jié)果:
a=['abc', 'abc', 'd', 'f']
根據(jù)這個結(jié)果很容易猜測出,在循環(huán)的時候如果一個元素刪除辉哥,那么之后的元素的索引都會減少1,而在下一次循環(huán)的時候index會增加1在辆,這么一來就有一個夾在中間的元素被忽略掉了证薇,那么很自然的我們會將代碼改成下面的樣子:
for index,i in enumerate(a):
if len(a[index])<3:
a.remove(a[index])
index=index-1
不幸的是度苔,結(jié)果并沒有改變:
a=['abc', 'abc', 'd', 'f']
個人猜測在其他代碼中,比如java浑度,這么做應(yīng)該是有用的(沒有嘗試)寇窑,但是在python中這么做是不可以的,在查閱了一些資料后發(fā)現(xiàn)箩张,如果只是刪除空格那么可以用如下表達(dá):
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])
結(jié)果還是比較好的:
a=['a', 'b']
2 刪除列表中的重復(fù)值
那么在實際中除了刪除空格有時候還需要刪除指定元素先慷,如果根據(jù)一開始的思路饮笛,代碼應(yīng)該是:
for i in a:
if a.count(i)>1:
a.remove(i)
同樣,對于相鄰的需要刪除的值论熙,仍然是有上面的問題的福青,這時候就要用一些其他的手段了:
- set()
b=sorted(set(a),key=a.index)
采用這種方式,可以將a中重復(fù)元素去掉脓诡,同時順序是按照元素在a中出現(xiàn)的順序:
a=['f','abc','c','abc','c','a','b','a']
b=['f', 'abc', 'c', 'a', 'b']
- {}.fromkeys().keys()
b={}.fromkeys(a).keys()
結(jié)果:
a=['f','abc','c','abc','c','a','b','a']
b=dict_keys(['f', 'abc', 'c', 'a', 'b'])
- set()+sort()
b=list(set(a))
b.sort(key=a.index)
和方法一基本相同
- 迭代
b=[]
for i in a:
if not i in b:
b.append(i)
結(jié)果和一相同无午,更為樸素的一種做法
- 排序后手動比較相鄰元素
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
和第一部分的最后一段代碼想法是類似的,關(guān)鍵在于要先排序祝谚。
3 python的打包
安裝
方法一:
直接通過pip安裝
pip install pyinstaller
方法二:
從github上下載源碼宪迟,然后進入解壓包目錄,打開命令行:
python setup.py install
打包
對于需要打包的.py文件交惯,直接在所處位置打開命令行:
pyinstaller -F a.py
隨后在當(dāng)前目錄的dist文件夾中就可找到打包后的可執(zhí)行程序次泽。
Ref
https://www.cnblogs.com/nzyjlr/p/4174145.html
https://blog.csdn.net/mrlevo520/article/details/51840217