python中list是有序,set是无序,这是为什么?

xqn2017 2017-08-25 09:51:51
如题,请问两者的底层数据结构有什么不同?python源码解析有介绍吗?
...全文
3833 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
无限_ 2020-10-23
  • 打赏
  • 举报
回复
list的数据结构是动态数组,元组是固定长度的数组,dict和set的数据结构都是哈希表
混沌鳄鱼 2017-08-25
  • 打赏
  • 举报
回复
在python中set的底层结构和字典是完全一样的都是哈希表,就当成是只有键没有值的字典就可以了。 Python 早期版本就没有set这个类型,那时候开发者都是直接建一个 {key1:None, key2:None}的字典来实现set的功能。 字典和set都是用空间来换时间,空间浪费很大。 set的最大用途是解决了判断某个元素在集合中出现的查找效率问题。

>>> timeit.timeit(stmt='10**4 in s',setup='s=range(10**5)', number=10**5)
13.447274759909192
>>> timeit.timeit(stmt='10**4 in s',setup='s=set(xrange(10**5))', number=10**5)
0.006686778187940945
>>> 
list的实现方式是链表,空间利用率高追加元素快而方便。
sanGuo_uu 2017-08-25
  • 打赏
  • 举报
回复
你这个问题有点像“是先有鸡还是先有蛋”
引用
python中list是有序,set是无序,这是为什么
我感觉它是故意的。 set是集合,集合在数学概念里面就是无序的。
引用
集合中的元素有三个特征:1.确定性(集合中的元素必须是确定的) 2.互异性(集合中的元素互不相同。例如:集合A={1,a},则a不能等于1) 3.无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,5,4}算作同一个集合。
oyljerry 2017-08-25
  • 打赏
  • 举报
回复 1
list是链表实现,set是hash表实现,不同的实现决定了是否排序

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧