Python-尝试删除重复的值,但“不可使用的类型:列表”

时间:2018-10-13 17:18:03

标签: python

这是我到目前为止所拥有的:

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'

该如何解决? 它说它不能有列表,并且我了解列表中有列表,但是如何使该功能起作用?

2 个答案:

答案 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]]