Python数据使用set对数据去重报错TypeError: unhashable type: 'list' 这个错误信息“TypeError: unhashable type: 'list'”表明你试图将一个列表(list)放入一个集合(set)中,但列表是可变的,所以它们不能被用作集合的键。 具体来说,集合中的元素必须是不可变的,这样才能保证集合的唯一性。而列表是可变的,这意味着...
可能原因: 1、set不支持list和dict类型的元素 解决方法: 1、list类型数据可以改为tuple类型。 t = ('juzicode.com','桔子code','橙子') l = ['juzicode.com','桔子code','橙子'] l2 =tuple(l) s = {t,l2} print(s)
查找和插入的速度极快,不会随着key的增加而变慢; 需要占用大量的内存,内存浪费多。 而list相反: 查找和插入的时间随着元素的增加而增加; 占用空间小,浪费内存很少。 要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:...
(1)因为 list 是可变的在它的生命期内,你可以在任意时间改变其内的元素值。 (2)所谓元素可不可哈希,意味着是否使用 hash 进行索引 (3)list 不使用 hash 进行元素的索引,自然它对存储的元素没有可哈希的要求;而 set 使用 hash 值进行索引。
判断值是否在set集合中的速度明显要比list快的多, 因为查找set用到了hash,时间在O(1)级别。 假设listA有100w个元素,setA=set(listA)即setA为listA转换之后的集合。 以下做个简单的对比: 第一个循环用了16min,第二个循环用了52s。 由此可见,在set中判断是否存在某值的效率要高的多。
现象:往set对象里add列表、集合对象时,时提示他们是不可hash的,而对于tuple类型就可以。 原因:set里面的对象是hash存储(所以是无序的),对于python万物都是对象,如果存储一个list对象,而后改变了list对象,那set中刚才存储的值的hash就变了。 结论:set是hash存储,必须存储不变的对象,例如字符串、数字、元组等。
此时再介绍下list的index方法: my_list = [10, 20, 30, 40, 20] 可以使用index方法来找到元素20在列表中第一次出现的位置 index = my_list.index(20) print(index) # 输出: 1 sorted(set(a_temp[:5]),key=a_temp.index) # 此时这个也就清晰了,按照集合中元素在a_temp中的index大小进行排序...
用list函数创建空列表。用tuple函数创建空元组。用dict函数创建空字典。用set函数创建空集合。# list函数...