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的疑问?】
一个教程的原文是他写错了还是。。。
■网友
dict要求key不能重复,且是无序的,set中的元素值也是不重复的无序的,而list不是这样的,list是有序列表其元素值可以相同。有什么结构能比list更适合作为set的参数?方括号怎么不是表示列表的啦?查看对象是调用其的str()方法,或者repr()方法?str方法返回给人看的表示,repr方法返回给python看的表示,repr方法返回的字符串可以用eval再得到值相同的对象,而str方法返回的字符串有可能就不是合法python表达式。貌似set类型的str与repr一样。随便一写,等神的答案
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- 怎样成为一名合格的Python程序员?
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- python 爬虫,咋获得输入验证码之后的搜索结果
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 智叔|很多家长还在整箱买:谈谈关于牛奶的17个真相警惕这些列入黑名单的“假牛奶”
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- 关于微信小程序的思考:运营者该何去何从
- 关于人工智能虚拟人的一些问题