总结:Python和Javascript中的集合

都动态语言了,效率往往不是首先考虑的,写起来顺手才重要~
Python和Javascript都是俺很欣赏的语言,可以像C一样结构化的写,也可以OO,真正的“所有都是对象”,真正的动态类型,函数是一等公民带来很多C系语言想都不会想的效果。。


Python的常用集合就三个:list、tuple、dict。虽然它数据类型还是挺多的。
剩下有defaultdict、deque、array、heapqueue、set等。SciPy里面还可以像Matlab一样搞matrix。

list在Python里面无处不在,照源码看list是一个PyObject*的动态数组。
而且"The growth pattern is:  0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ..." 好小气。。很多语言都是原长度的1点几到2倍的增长。。
除了数组那些功能,list还有pop、push、sort、reverse等方法。

tuple和list的区别就是创建好就不能改大小,需要的时候效率高点,其他没什么区别。
dict名字比较明显了,哈希表。类似的,每个Python对象都有__hash__(),__eq()__和__cmp__可以自己写。

collections这个模块里面到2.5暂时有两个东东:defaultdict,作用就是当要找的key不在的时候返回一个用户定义的缺省值。。deque,链表实现的双端队列。
heapq其实不是一个类,而是一组在list上做堆算法的函数,本来很多堆就是在数组上实现的。
array是专门高效存储"uniformly typed numeric values"的,比如int、char、double的。
sets不用说了,里面还有个frozenset也是不能改的
最后,weakref这个模块里面有WeakKeyDictionary、WeakValueDictionary


Javascript里面其实没什么集合,数组模拟所有序列容器,有pop、shift,push、unshift,sort、reverse,concat、slice、splice等等方法。
另外因为js里面someobj["property"]和someobj.property是一样的东东,就像Python里面getattr()和setattr()一样,对象如果这样用来存数据被叫做Associative Array,但是js没有dir(),只能用for in。

最后,我觉得Javascript闭包也算一种集合类型的,虽然很多其他语言也有闭包,但一般没js里面使用这么多、强调这么多。这是一个很tricky的东西,要好好搞懂它的特性。


References:
http://docs.python.org/
http://www.quirksmode.org/js/contents.html
posted @ 2008-06-30 21:09  VeryDxZ  阅读(808)  评论(0编辑  收藏  举报