刪除列表中重復元素


一、位置法

思想:遍歷整個列表,找到重復元素的位置。然后對列表中這些位置的元素進行刪除。
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']


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM