Python 关于set的疑问?

从内部逻辑上来讲都是通过hash表来实现的,所以许多特性是高度相似的,比如可以O(1)查找是否存在某个值。实际上用key和value相同的字典也可以替代set,但是set作为一个专用的数据类型会更方便。set是个类,它的构造函数接受一个序列作为参数,list只是序列的一种写法,你用tuple也是可以的:set((1,2,3))用dict也是可以的:set({1:1,2:2,3:3})当然用别的set也可以。这跟list接受一个序列作为参数来构造一个新的列表、tuple接受一个序列作为参数来构造一个新的元组、dict接受一个key-value对的序列作为参数来构造一个新的字典是一致的。至于显示的格式,是因为set以前没有专门的语法,而Python希望repr返回的结果可以通过eval重新变回原来的值,所以选了这样的显示方式。
■网友
早期的python没有set,只有dict、list、tuple,正好把大中小括号全给用了。等后来有了明确的set,不好表示了,只好用set()这种先表示成list,再转换成set的方法。从数据逻辑上说,set确实可以看成只有key的dict,所以从python2.7开始,支持用{1,2,4}这样的方式表示set。
■网友
1 为什么有人把set的元素说成是dict的没有value的key??答,因为用dict实现set是很多语言的常见做法,虽然py没有这么做(为了省内存,value都设为NULL有点费),但是py的set基本就是dict的代码拷过来改一改,这个从维护性来说是不太好的2 另外,定义set的时候set_1 = set()为什么必须要用列表来作为函数set()的参数?答,这并不是语法定义,而且也不一定用列表,这句的意思其实是,构造一个列表,然后当成参数传给set的调用,而set是一个类,对其调用就是构造出一个实例,构造函数的参数是这个list,可迭代对象即可,不一定要list,只是list常用罢了3 而且最后查看set_1的内容:set()中的方括号又不代表列表,难道只是为了表示这是一个集合吗?答,参照2的回答,这里方括号表示就是一个list,相当于:lst = set_1 = set(lst)证明:\u0026gt;\u0026gt;\u0026gt; def f():... s = set()...\u0026gt;\u0026gt;\u0026gt; import dis\u0026gt;\u0026gt;\u0026gt; dis.dis(f) 2 0 LOAD_GLOBAL 0 (set) 3 LOAD_CONST 1 (1) 6 LOAD_CONST 2 (2) 9 LOAD_CONST 3 (3) 12 BUILD_LIST 3 15 CALL_FUNCTION 1 18 STORE_FAST 0 (s) 21 LOAD_CONST 0 (None) 24 RETURN_VALUE\u0026gt;\u0026gt;\u0026gt;如果是语法级别的set构造,在2.7之后才支持,{1,2,3}这样
■网友
set对象可以这么初始化:a={1,2,3,4}没有必要先创建个列表,再创建set
■网友
【Python 关于set的疑问?】 Python 关于set的疑问?

一个教程的原文是他写错了还是。。。
■网友
dict要求key不能重复,且是无序的,set中的元素值也是不重复的无序的,而list不是这样的,list是有序列表其元素值可以相同。有什么结构能比list更适合作为set的参数?方括号怎么不是表示列表的啦?查看对象是调用其的str()方法,或者repr()方法?str方法返回给人看的表示,repr方法返回给python看的表示,repr方法返回的字符串可以用eval再得到值相同的对象,而str方法返回的字符串有可能就不是合法python表达式。貌似set类型的str与repr一样。随便一写,等神的答案


    推荐阅读