Python四种数据结构list/tuple/set/dict先进于PHP的一种(array)在哪里?

2012-08-21 17:57:43 +08:00
 tangyuan
我记得PHP里面就一种array数据结构,也可以当字典来用,个人觉得简单明了,Python为和要设计4种不同的呢?我了解各有不同,譬如tuple是不可更改的,适合用于来做dict的key,但是都会很常用到吗?
5888 次点击
所在节点    Python
15 条回复
reus
2012-08-21 18:13:41 +08:00
四种都会常用到的,说不上先进吧,取向不同而已
array只是就是list和dict合体
mikale
2012-08-21 18:22:16 +08:00
这是编程风格问题....没有先进和不先进之分..

语言只有高明之分,并无先进淘汰落后这种进化论分法
ljbha007
2012-08-21 18:23:16 +08:00
能想到的优点就是tuple可以用来返回多个值,比如

(x,y) = getCoords()
reus
2012-08-21 18:26:08 +08:00
php也可以:
list($x, $y) = getCoords()
py的话括号不是必须的,写成:
x, y = getcoords()
就行
bhuztez
2012-08-21 18:36:27 +08:00
Python不止四种数据结构吧, 基本的就有bytearray/dict/frozenset/list/set/tuple了,算上标准库,还有collections.namedtuple, collections.defaultdict, collections.deque, collections.OrderedDict, array.array。
keakon
2012-08-21 18:44:52 +08:00
4种数据结构确实都不可替代且经常使用。你能举个谁是多余的例子么…

另外,方便这点算不算优点呢?
[i * i for i in xrange(10)]
([0] * 100)[10:20]
pyKun
2012-08-21 18:46:12 +08:00
个人理解:
1.数据类型的细化有利于精细的编程,tuple可以简单明了的告诉读者这个变量在运行时不可变(某些条件下也事可变的。。。),set严格的吧表示数学意义上的集合,然后个generator是个很有意义的类型,楼主自己研究下
2.dict和list的存在意义类似但不尽相同,list表示一个简单的集合,dict是一个支持增删改查的“数据库”类型,参考下《programming python》
3.一个叫什么来着的思想,大概就是我们只需要让每个子程序仅仅保证完成自己的工作,进而保证总体工作的正常。。。不要把很多不同的任务依赖到一个程序上,类啊,还有这些不同的数据对象也是一样的,如果你天天总是接触到数学意义的集合,你会不会有一天想自己定义一个对象来保证集合里没有重复数据,这样方便你编程,于是python就给了你set
Ranler
2012-08-21 19:53:27 +08:00
不懂PHP,但是研究过Lua解释器,Lua也是只有一种table数据结构,既可以当数组用也可以当字典,但是其内部实现还是会对不同的用途开辟不同存储区域,进行不同优化,上层结构只是封装了一下。

数据结构分得越细,通用性越差,但是每种类型特性表现的越好,可以针对不同方向使用和优化。
dianso
2012-08-21 23:20:23 +08:00
语言没有所谓的优势
aisk
2012-08-22 14:03:06 +08:00
应该说提供很多种,但是这四种提供语法糖了吧…
ivenvd
2012-08-22 15:53:57 +08:00
除了用法上,速度也有区别,好象是 frozenset > set > tuple > list > dict ,不确定。
kernel1983
2012-08-23 23:27:15 +08:00
var in set和in list的速度, 自己可以比较看看
chuck911
2012-08-24 09:16:26 +08:00
语法丑,array(),array_xx()
当然php5.4对语法优化了
est
2012-08-24 10:29:49 +08:00
@bhuztez 恩。大数据运算经常用到namedtuple。非常省内存的一种结构。
glasslion
2012-08-24 15:49:03 +08:00
list/tuple 和set/map 的底层实现的数据结构完全不同,不同操作的时间复杂度也不同。
为了优化PHP/JS里四不像的数组,编译器开发人员不知耗费了多少心血

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/45697

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX