一、位置法
思想:遍歷整個列表,找到重復元素的位置。然后對列表中這些位置的元素進行刪除。
PS:此處刪除不可用remove,.remove(str)是在列表中從前往后查找你的str,找到一個並刪除,並不能實現按索引刪除
代碼如下:
l1 = ['b','c','d','b','c','a','a',"a"]
l2 = []
i = 0
for i in range(len(l1)) :
for j in range(i+1,len(l1)):
if l1[i] == l1[j] and j not in l2:
l2.append(j) #找到出現重復字符的位置
print(l2)
for i in l2[::-1]:
print(l1)
print("刪除位置為:",i)
l1.pop(i) #每次刪除,列表都會變短,所以需要從最后開始取,並從后往前開始刪
#l1.remove(l1[i]) #一開始使用了l1.remove(l1[i]),毫無作用,l1[i]就是一個str
# 重新在l1找到這個字符串(順序優先),然后刪除,根本無法做到從后往前刪
print("刪除結果為:",l1)
print("")
print(l1)
運行結果:
[3, 4, 6, 7]
['b', 'c', 'd', 'b', 'c', 'a', 'a', 'a']
刪除位置為: 7
刪除結果為: ['b', 'c', 'd', 'b', 'c', 'a', 'a']
['b', 'c', 'd', 'b', 'c', 'a', 'a']
刪除位置為: 6
刪除結果為: ['b', 'c', 'd', 'b', 'c', 'a']
['b', 'c', 'd', 'b', 'c', 'a']
刪除位置為: 4
刪除結果為: ['b', 'c', 'd', 'b', 'a']
['b', 'c', 'd', 'b', 'a']
刪除位置為: 3
刪除結果為: ['b', 'c', 'd', 'a']
['b', 'c', 'd', 'a']
進程已結束,退出代碼 0
二、重復元素計數法
思想:對整個列表的所有元素進行計數,將計數存入字典中(key(列表元素):value(出現次數))。字典中所有value大於1的key,都在列表中進行刪除操作。
PS:此處的刪除操作是remove函數,其特性是按順序查找key,是從前刪起,並不能實現保留重復元素的第一次,只能保留最后一次
代碼如下:
l1 = ['b','c','d','b','c','a','a']
l2 = {}
for i in range(len(l1)): #這個for循環將l1中所有字符進行計數,並存入字典l2
if l1[i] in l2:
l2[l1[i]] += 1
else:
l2[l1[i]] = 1
print(l2, end="\n\n")
print(f"原數組為:{l1}\n")
for i in l2: #這個for循環將l2中所有key的次數進行判斷,大於1就在l1中進行刪除操作
if l2[i] > 1: #並在l2中進行-1操作,直至計數為1
print(f"刪除的元素為:{i}")
l1.remove(i)
print(f"刪除結果為:{l1}\n")
l2[i] -= 1
print(l1)
結果為:
{'b': 2, 'c': 2, 'd': 1, 'a': 2}
原數組為:['b', 'c', 'd', 'b', 'c', 'a', 'a']
刪除的元素為:b
刪除結果為:['c', 'd', 'b', 'c', 'a', 'a']
刪除的元素為:c
刪除結果為:['d', 'b', 'c', 'a', 'a']
刪除的元素為:a
刪除結果為:['d', 'b', 'c', 'a']
['d', 'b', 'c', 'a']