我想消除列表中的重复值(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)]
]
答案 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)
。