Discuss / Python / 求解 set 能否list

求解 set 能否list

Topic source

fengdao2793

#1 Created at ... [Delete] [Delete and Lock User]

我看文章中写着,dict 和 set 类型差不多,并且key 都是 不可变对象。然后呢,也说了,list是可变的,就不能作为key。

但接下来刚讲到set的时候,直接举的第一个例子:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

  注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不    表示set是有序的。。

不是说set是不能用list做key的吗?这里不是在使用吗?

还有为何set([1,2,3]) 可以,但是set(1,[2,3])就不可以,按照规则,后者我能明白,部分是list,当然不可以,但是前者可以正常运行,我理解不了,哪位老师帮帮我,谢谢。

-Saunter

#2 Created at ... [Delete] [Delete and Lock User]

我的理解是:set([1,2,3])不是表示将[1,2,3]这个list放入set中,而是一种创建set的表达方法,但set(1,[2,3])就真的是意图创建由一个int和一个list构成的set了,这是不可接受的。再清晰一点讲,你可以尝试查看len(set([1,2,3])),会发现=3,相当于这个set中有3个key,每个key的类型应该都是int,而按你的理解,这个set中的key应该只是一个list,其len应该输出的是1。

(1, 2, 3) 元组不可变,可做KEY。(1, [2, 3])  元组里面的list可变,所以不能做KEY。

set([1,2,3])可以,set(1,[2,3])不可以,原因应该和list没啥关系,因为set()函数只能有一个参数,就是说set(1,2)也是不行的,会报错;

但是为啥a = set([1,2,3])可以,a = {[1,2,3]}不可以,这个有些费解

lemon-C-J-Q

#6 Created at ... [Delete] [Delete and Lock User]

我是这样理解的:list的命令是这样a=[1,2,3] ;tuple的命令是这样a=(1,2,3,);dict的命令是这样a={'A':1,'B':2,'C':3};set的命令是这样a=set([1,2,3])。这样一对比可以很明显看出set的set([ ])和list的[ ]、tuple的()、dict的{' ': }是并列关系。

昨天问了一个同事,他说set([1,2,3])可以用,是因为set()方法把list强转化了,相当于类型转换,就像int('123')一样,感觉这个解释有些说的通


  • 1

Reply