0

我想消除列表(alist)中的重复值。在这里,我已经这样做了,但我收到了这个错误:TypeError: unhashable type: 'list' 那么,我怎样才能消除这样一个不可散列的列表中的重复值,如下所示。
请注意,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)]
        ]
4

1 回答 1

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:and seen.add(j)

于 2013-10-08T22:26:27.067 回答