Python 列表元素去重

问题遇到的现象和发生背景

我想把列表中出现重复的元素及其本身删除,或者知道有几个元素重复了

问题相关代码,请勿粘贴截图

a = [1, 2, 3, 3, 5, 6, 6]

-->[1, 2, 5]

运行结果及报错内容

至今未解出

我的解答思路和尝试过的方法

我试过用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]