多列表相同元素删除

前言

最近遇到这样一个例子:
有多份文档,每份文档里有支行,日期,内容三个数据,现在每种数据存在一个列表里,把出现三个数据相同的剔除掉。

例:

a = [“111”,“2”,“3”,“4”,“5”,“111”,“2”] # 支行
b = [“AAA”,“B”,“C”,“D”,“E”,“AAA”,“B”] # 日期
c = [“aaa”,“b”,“c”,“d”,“e”,“aaa”,“k”] # 内容

结果:

[‘2’, ‘3’, ‘4’, ‘5’, ‘2’]
[‘B’, ‘C’, ‘D’, ‘E’, ‘B’]
[‘b’, ‘c’, ‘d’, ‘e’, ‘k’]

这里在和朋友讨论下出了三种方法, 分享一下:

print("--------------------------方法二--------------------------------------")
def delete_repeat(list_a,list_b,list_c):
    from collections import defaultdict
    res_a, res_b, res_c = [], [], []
    dic = defaultdict(list)
    for index, group in enumerate(zip(list_a, list_b, list_c)):
        dic[group].append(index)
    for key in dic:
        if len(dic[key]) == 1:
            res_a.append(list_a[dic[key][0]])
            res_b.append(list_b[dic[key][0]])
            res_c.append(list_c[dic[key][0]])
    return res_a, res_b, res_c


def delete_repeat_another_way(list_a,list_b,list_c):
    _set = set([])
    groups =list(zip(list_a, list_b, list_c))
    res = []
    for group in groups:
        if groups.count(group) == 1:
            res.append(group)
    res_a,res_b,res_c=[sub_res[0] for sub_res in res],[sub_res[1] for sub_res in res
                        ], [sub_res[2] for sub_res in res]
    return res_a, res_b, res_c


a = ["111", "2", "3", "4", "5", "111", "2"] # 支行
b = ["AAA", "B", "C", "D", "E", "AAA", "B"] # 日期
c = ["aaa", "b", "c", "d", "e", "aaa", "k"] # 内容

a1, b1, c1 = delete_repeat_another_way(a, b, c)
print(a1)
print(b1)
print(c1)


print("----------------------方法三---------------------------")


def delete_repeat_final_way(list_a,ist_b,list_c):
    from collections import Counter
    result_dict = Counter(zip(list_a,list_b,list_c))
    res = [i for i in result_dict if result_dict[i] == 1]
    res_a,res_b,res_c = [sub_res[0] for sub_res in res
                         ],[sub_res[1] for sub_res in res
                            ], [sub_res[2] for sub_res in res]

    return res_a,res_b,res_c