Python中等价于Java Collections Framework的是什么?

5
2个回答

15

事实证明,Python中与Java Collections Framework等价的部分是... Python。Java Collections Framework中涵盖的所有核心集合在核心Python中已经存在。

不妨试试!序列提供列表、队列、栈等等。字典是哈希表和映射。集合也存在等等。

有人可能认为Python比Java更高级,因为它本身就内置了所有这些高阶抽象数据类型。(它还支持面向对象、过程式和函数式编程方法。)


1
+1 很好的回答。参考序列类型链接:http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-buffer-xrange - Seth
好的回答。但是如果Python是集合框架的“等价物”,那么它的功能将等同于JCF,我相信它会超越JCF的范围。;) - Johannes Charra
我承认,你是对的。 ;) Python是集合框架的超集,而不是等价集合。 - Travis Bradshaw
2
SortedMap和NavigableMap是由红黑树支持的TreeMap类实现的,Python标准模块中是否有类似于TreeMap的类呢? - Alex M981

12

除了Python内置库之外,您可能还需要查看 collections 库。

>>> import collections
>>> dir(collections)
['Callable', 'Container', 'Hashable', 'ItemsView', 'Iterable', 'Iterator', 'KeysView', 'Mapping', 'MappingView', 'MutableMapping', 'MutableSequence', 'MutableSet', 'Sequence', 'Set', 'Sized', 'ValuesView', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_abcoll', '_iskeyword', '_itemgetter', '_sys', 'defaultdict', 'deque', 'namedtuple']
>>>

非常好的补充!值得一提的是,集合中的数据类型通常比内置类型更高级,有时会复制内置类型的功能,但具有不同的性能特征。例如,虽然deque和list(内置)在很大程度上是兼容的,但对于某些使用模式,它们的性能差异很大。 - Travis Bradshaw
2
然而,从2.6开始,内置对象派生自collections.ABC,所以您可以确信listcollections.Iterable的适当子类。 - S.Lott
我希望有一个统一的架构,保证算法可以在各种集合实现上工作,只要这些实现是相同“类型”的即可。collections模块似乎提供了这个功能。 - saidimu apale
正如S.Lott指出的那样,自Python 2.6以来,内置类型完全是collections模块提供的统一架构的一部分。不要仅因为来自Java的概念偏见而仅限于使用collections模块的成员。 - Travis Bradshaw
1
此外,需要注意的是,与Java不同,Pythonic方法论并非“先看后跳”。在执行算法操作之前,您不一定要检查类型。相反,您执行这些操作,并让语言的鸭子类型特性确定操作是否成功。也被称为“宁可请求原谅,而不是事先获得许可”的方式。 - Travis Bradshaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接