python中list去重的方法以及TypeError: unhashable type: 'list'问题解析

list常用去重方法

在python中使用list存储数据时有时候需要list中的数据不能重复,这样就需要用到去重操作,因为set是会自动把重复的内容去掉的,所以常用的简单去重方法是先将list转为set,然后再转为list。如:

a = [1,4,8,2,4,1]
a = list(set(a))
print(a)
输出的结果为:[8, 1, 2, 4]

这样就轻松完成了去重操作。

TypeError: unhashable type: 'list’问题分析

上面的方法固然好用,但是在运行下面代码是会报错:

>>> a = [[1,2],3]
>>> a = list(set(a))
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: 'list'

报错提示的意思是:list是不能哈希的。这是因为调用 set() 来转为集合类型时,传递进来的参数必须是可哈希的(hashable),而list是可变类型无法进行哈希。特意查了查资料,发现可哈希的元素有:int、float、str、tuple;不可哈希的元素有:list、set、dict。

解决方案

转为set的方法行不通,只能另寻办法,我采用的方式如下:

a = [[1,2],3]
b = []
    for i in a:
        if i not in b:
            b.append(i)

所以最后列表b就是a经过去重操作后得到的结果。

小灰灰爬行记
2018.12.25

你可能感兴趣的:(python学习)