python的列表list可以用for循環(huán)進(jìn)行遍歷,實(shí)際開發(fā)中發(fā)現(xiàn)一個(gè)問題,就是遍歷的時(shí)候刪除會(huì)出錯(cuò),例如
創(chuàng)新互聯(lián)公司是一家以成都網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化排名、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為隧道混凝土攪拌車等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
l = [1,2,3,4]
for i in l:
if i != 4:
l.remove(i)
print l
這幾句話本來意圖是想清空列表l,只留元素4,但是實(shí)際跑起來并不是那個(gè)結(jié)果。再看下面,利用index來遍歷刪除列表l
l = [1, 2, 3, 4]
for i in range(len(l)):
if l[i] == 4:
del l[i]
print l
這樣沒問題,可以遍歷刪除,但是列表l如果變?yōu)?l = [1,2,3,4,5]
如果還是按照上面的方法,設(shè)想一下,range開始的范圍是0-4,中間遍歷的時(shí)候刪除了一個(gè)元素4,這個(gè)時(shí)候列表變成了= [1,2,3,5],這時(shí)候就會(huì)報(bào)錯(cuò)了,提示下標(biāo)超出了數(shù)組的表示,原因就是上面說的遍歷的時(shí)候刪除了元素
所以python的list在遍歷的時(shí)候刪除元素一定要小心
可以使用filter過濾返回新的list
l = [1,2,3,4]
l = filter(lambda x:x !=4,l)
print l
這樣可以安全刪除l中值為4的元素了,filter要求兩個(gè)參數(shù),第一個(gè)是規(guī)則函數(shù),第二個(gè)參數(shù)要求輸入序列,而lambda這個(gè)函數(shù)的作用就是產(chǎn)生一個(gè)函數(shù),是一種緊湊小函數(shù)的寫法,一般簡單的函數(shù)可以這么些
或者可以這樣
l = [1,2,3,4]
l = [ i for i in l if i !=4]//同樣產(chǎn)生一個(gè)新序列,復(fù)值給l
print l
或者干脆建立新的list存放要?jiǎng)h除的元素
l = [1,2,3,4]
dellist = []
for i in l:
if i == 4:
dellist.append(i)
for i in dellist:
l.remove(i)
這樣也能安全刪除元素
所以要遍歷的時(shí)候刪除元素一定要小心,特別是有些操作并不報(bào)錯(cuò),但卻沒有達(dá)到預(yù)期的效果
上面說到產(chǎn)生新序列,賦值等等,用python的id()這個(gè)內(nèi)置函數(shù)來看對(duì)象的id,可以理解為內(nèi)存中的地址,所以有個(gè)簡要說明
如果
l = [1,2,3,4]
ll = l
l.remove(1)
print l//肯定是[2,3,4]
print ll//這里會(huì)是什么?
如果用id函數(shù)查看的話就發(fā)現(xiàn)
print id(l),id(ll)
打印出相同的號(hào)碼,說明他們其實(shí)是一個(gè)值,也就是說上面的print ll將和l打印的一樣,所以python有這種性質(zhì),用的時(shí)候注意一下就行了
1. 使用內(nèi)置函數(shù)set
lists = [1,1,2,3,4,6,6,2,2,9]
lists = list(set(lists))
先將列表轉(zhuǎn)換為集合,因?yàn)榧鲜遣恢貜?fù)的,故直接刪除重復(fù)元素,而且輸出結(jié)果為排序后的
在Python中主要有5種方式 。
1、使用set函數(shù)
set是定義集合的,無序,非重復(fù)
numList = [1,1,2,3,4,5,4]
print(list(set(numList)))
#[1, 2, 3, 4, 5]
2、先把list重新排序,然后從list的最后開始掃描
a = [1, 2, 4, 2, 4, 5,]
a.sort()
last = a[-1]
for i in range(len(a) - 2, -1, -1):
if last == a[i]:
del a[i]
else:
last = a[i]
print(a) #[1, 2, 4, 5]
3、使用字典函數(shù)
a=[1,2,4,2,4,]
b={}
b=b.fromkeys(a)
c=list(b.keys())
print(c) #[1, 2, 4]
4、append方式
def delList(L):
L1 = []
for i in L:
if i not in L1:
L1.append(i)
return L1
print(delList([1, 2, 2, 3, 3, 4, 5])) #[1, 2, 3, 4, 5]
5、count + remove方式
def delList(L):
for i in L:
if L.count(i) != 1:
for x in range((L.count(i) - 1)):
L.remove(i)
return L
print(delList([1, 2, 2, 3, 3, 4]))#[1, 2, 3, 4]
1
len(list)
列表元素個(gè)數(shù)
2
max(list)
返回列表元素最大值
3
min(list)
返回列表元素最小值
4
list(seq)
將元組轉(zhuǎn)換為列表
序號(hào)
方法
1
list.append(obj)
在列表末尾添加新的對(duì)象
2
list.count(obj)
統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)
3
list.extend(seq)
在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來的列表)
4
list.index(obj)
從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置
5
list.insert(index, obj)
將對(duì)象插入列表
6
list.pop([index=-1])
移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值
7
list.remove(obj)
移除列表中某個(gè)值的第一個(gè)匹配項(xiàng)
8
list.reverse()
反向列表中元素
9
list.sort( key=None, reverse=False)
對(duì)原列表進(jìn)行排序
10
list.clear()
清空列表
11
list.copy()
復(fù)制列表
有很多種方法都能實(shí)現(xiàn)從列表中刪除元素。
方法一:remove(具體的元素),該函數(shù)可以刪除列表中某個(gè)值的第一個(gè)匹配項(xiàng)。
方法二:使用pop(元素位置)來刪除,pop()還可以接著使用。
方法三:使用del關(guān)鍵字根據(jù)索引來刪除元素。
本文名稱:python函數(shù)清空列表 python 清空列表
文章鏈接:http://jinyejixie.com/article6/dosdjig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、云服務(wù)器、網(wǎng)站內(nèi)鏈、軟件開發(fā)、外貿(mào)建站、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)