Python中为何有时可将List转换为Set,有时却不行?
为啥关于List转Set会有矛盾说法?
哈哈,这个坑我刚学Python的时候也踩过!其实根本不是矛盾,只是大家说的“转换”完全是两回事儿~
两种完全不同的「转换」场景
1. 把整个List作为单个元素放进Set——确实不行!
这就是那些说“无法转换”的人遇到的情况。因为Set的底层是哈希表,要求里面的每个元素都必须是「可哈希(hashable)」的,而List是可变类型(你可以随时往里面加元素、改元素),属于不可哈希类型,所以直接把List当元素塞Set里会报错:
my_list = [[1, 2], [3, 4]] my_set = set(my_list) # 报错:TypeError: unhashable type: 'list'
2. 把List里的所有元素提取出来组成Set——完全可以!
这就是另一部分人说“能实现转换”的场景。只要List里的元素是可哈希的(比如整数、字符串、元组这些不可变类型),直接用set()包裹List就能把里面的元素去重转成Set:
my_list = [1, 2, 2, 3, "a", "a"] my_set = set(my_list) # 得到 {1, 2, 3, 'a'}
矛盾的根源总结
说白了就是大家对「将List转换为Set」的理解不一样:
- 一部分人想的是“把List本身作为Set的成员”,这违反了Set对元素可哈希的要求,所以不行;
- 另一部分人想的是“把List里的元素集合转换成Set”,这是Set最常用的用法之一,当然可行。
内容的提问来源于stack exchange,提问作者PProteus
相关产品推荐
相关产品推荐

