l = [1,2,3,4]
l1 = l
l.remove(2)
print (l)
print (l1)
結(jié)果為:
[1,3,4]
[1,3,4]
原因是因?yàn)閜ython中的賦值其實(shí)只是給了一個(gè)存該值的地址驻右,remove的刪除是將該地址上的值刪掉了外盯,如果使用del的話就不會出現(xiàn)這種情況遭笋,因?yàn)閐el是根據(jù)索引刪除咬腕,
只刪除本數(shù)組下該索引的位置
l = [1,2,3,4]
for i in l:
if i != 4:
? ? l.remove(i)
print (l)
結(jié)果為[2趴酣,4]
原因是romove刪除元素時(shí)會將原來存該元素的空間刪掉梨树,然后下一個(gè)元素自動遞補(bǔ)到前面,同時(shí)長度減一岖寞。
循環(huán)刪除容易出現(xiàn)數(shù)組越界的情況抡四,這時(shí)候不能使用索引進(jìn)行循環(huán):
for i in range(0,len(a)):
if(a[i] == 3)
del.a[i]
如果這樣進(jìn)行刪除仗谆,一定會出現(xiàn)索引out index的情況指巡。
要使用分片的方式:
l = [1,2,2,3,2,4]
for x in l[:]:
? ? if (x == 2):
? ? ? ? l.remove(x)
print(l)