消除不可用列表中的重复值

时间:2013-10-08 22:19:14

标签: python

我想消除列表中的重复值(alist)。在这里,我已经这样做了,但是我收到了这个错误:TypeError: unhashable type: 'list' 那么,如何消除下面不可删除的列表中的重复值。
请注意,列表中的第三个值(alist[2])无用,您可以忽略它们。

  alist=[
               [('as','bn',1),('ck','dy',1),('et','fv',2)],
               [('as','bn',1),('gx','ha',3)],
               [('ck','dy',1),('kj','mw',5)]
        ]

            b=[]

            for i in alist:
                a =[]
                for j in i:
                    if (j[0],j[1]) not in a:
                        a.append((j[0],j[1]))
                c = list(set(b)-set(a))
                b.append(c)

预期结果:

  alist=[
               [('as','bn',1),('ck','dy',1),('et','fv',2)],
               [('gx','ha',3)],
               [('kj','mw',5)]
        ]

1 个答案:

答案 0 :(得分:2)

我认为您需要以下内容:

alist  =[[('as','bn',1),('ck','dy',1),('et','fv',2)],
         [('as','bn',1),('gx','ha',3)],
         [('ck','dy',1),('kj','mw',5)]]

seen = set()
b = []
for i in alist:
    a = []
    for j in i:
        if (j[0], j[1]) not in seen:
            a.append(j)
            seen.add((j[0], j[1]))
    b.append(a)

alist = b

结果:

>>> pprint.pprint(alist)
[[('as', 'bn', 1), ('ck', 'dy', 1), ('et', 'fv', 2)],
 [('gx', 'ha', 3)],
 [('kj', 'mw', 5)]]

请注意,基于您的代码,我假设您要删除前两个元素与之前看到的元组匹配的元组。如果您想使用整个元组进行比较而不是仅使用元组中的前两个值,请将代码更改为使用if j not in seen:seen.add(j)