删除列表中重复元素

一、位置法

思想:遍历整个列表,找到重复元素的位置。然后对列表中这些位置的元素进行删除。
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']
posted @ 2020-03-07 10:56  Jil-Menzerna  阅读(1753)  评论(0编辑  收藏  举报