一、位置法
思想:遍历整个列表,找到重复元素的位置。然后对列表中这些位置的元素进行删除。
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="
")
print(f"原数组为:{l1}
")
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}
")
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']