我想把列表中出现重复的元素及其本身删除,或者知道有几个元素重复了
a = [1, 2, 3, 3, 5, 6, 6]
至今未解出
我试过用set()但得不到想要的结果
比如有个列表[1, 2, 3, 3, 5, 6, 6],我想要最后得到[1, 2, 5]或者也可以得到有几个元素重复了,2个(3和6)
a = [1, 2, 3, 3, 5, 6, 6]
lena = len(a)
for i in range(len(a)):
for j in range(i+1, lena):
if a[i] == a[j]:
a.pop(j)
a.pop(i)
lena = lena -2
break
print(a)
望采纳!谢谢
a = [1, 2, 3, 3, 5, 6, 6]
res = [i for i in a if a.count(i) == 1]
print(res)
"""--result
[1, 2, 5]
"""
你可以看看,不一定要用,只是给你提供一个思路
import pandas as pd
a = [1, 2, 3, 3, 5, 6, 6]
b = pd.DataFrame(a)
# 这个可以查看重复值的位置
print(b[b.duplicated()])
# 这个可以查看重复的元素有多少个
print('重复值有 {} 个'.format(b.duplicated().sum()))
# c 是把所有重复值去掉,不保留任何重复项,d 是输出最后结果
c = b.drop_duplicates(keep=False)
d = (c.T).values.tolist()
print(d[0])
用set怎么得不出结果了,你是转成set之后忘记重新转list了吗
b=list(set(a))
由于set是无顺序的,此时b可能不是由小到大排序
如果你需要排序,那再加个函数
b=sorted(list(set(a)))即可
除了用list(set())转,也能用列表推导式求得:
>>> a = [1, 2, 3, 3, 5, 6, 6]
>>> b = [i for i in a if a.count(i)==1]
>>> b
[1, 2, 5]
set 解决不了你的需求, 因为 set 相当于 SQL 里面的distinct, 减少重复,而不是清空重复对象
以下有2个方法
src_list = [1, 2, 3, 3, 5, 6, 6, 7, 7, 7, 7, 7, 11, 11, 11, 10, 10, 10]
# 方法一 将不重复的元素取出来写入新的列表
def del_dupilcate_item(src_list: list)->list:
new_list = []
for item in src_list:
if src_list.count(item) == 1:
new_list.append(item)
return print(new_list)
if __name__ == "__main__":
del_dupilcate_item(src_list)
# 结果如下:
[1, 2, 5]
# 方法二 在原来列表基础之上进行删除
def del_dupilcate_item(src_list: list)->list:
# 循环集合
for item in set(src_list):
# 统计列表中元素重复次数
duplicate_times = src_list.count(item)
# 处理重复 >= 2的元素
if duplicate_times >= 2:
# 删除掉重复多少次就删除多少次,直接不存在
while duplicate_times != 0:
# 删除
src_list.remove(item)
# 删除一次减1次
duplicate_times -= 1
return print(src_list)
if __name__ == "__main__":
del_dupilcate_item(src_list)
# 结果如下:
[1, 2, 5]