这是我到目前为止所拥有的:
def remove_duplicates(values):
output = []
seen = set()
for value in values:
# If value has not been encountered yet,
# ... add it to both list and set.
if value not in seen:
output.append(value)
seen.add(value)
return output
# Remove duplicates from this list.
list = [[5, 1], [1, 2], [3, 4], [4, 5]]
result = remove_duplicates(list)
print(result)
我得到一个错误:
Traceback (most recent call last):
File "python", line 14, in <module>
File "python", line 7, in remove_duplicates
TypeError: unhashable type: 'list'
该如何解决? 它说它不能有列表,并且我了解列表中有列表,但是如何使该功能起作用?
答案 0 :(得分:1)
使用tuple
代替:seen.add(tuple(value))
原因是列表是可修改的,并且集合将元素存储在哈希表中,因此,如果您修改条目,它将修改其哈希,但不会更新集合。因此,列表等可修改类型被禁止作为集合和字典中的键。
当然,每次要检查集合中是否有东西时,都要进行tuple
更改。
答案 1 :(得分:1)
将列表转换为元组,然后将元组列表转换为set,然后将元组转换为list。
lst = [[1, 2], [3, 4], [1, 2]]
list(map(list,set(map(tuple,lst))))
>>>> [[1, 2], [3, 4]]