【问题标题】:What is/are the Python equivalent(s) to the Java Collections Framework?Java Collections Framework 的 Python 等价物是什么?
【发布时间】:2011-01-04 01:40:30
【问题描述】:

Java 集合框架类似于 C++ 标准模板库:“用于表示和操作集合(将多个元素组合成一个单元的对象)的统一架构。”

http://java.sun.com/docs/books/tutorial/collections/intro/index.html

【问题讨论】:

    标签: java c++ python collections


    【解决方案1】:

    事实证明,Python 中 Java 集合框架的等价物是……Python。 Java 集合框架中的所有核心集合都已存在于核心 Python 中。

    试一试!序列提供列表、队列、堆栈等。字典是您的哈希表和映射。存在集合等。

    人们可能会认为 Python 是一种比 Java 更“高级”的语言,因为它本身就提供了所有这些更高阶的抽象数据类型。 (它还支持面向对象、过程和函数式编程方法。)

    【讨论】:

    • +1 不错的答案。链接到序列类型以供参考:docs.python.org/library/…
    • 好答案。但是,如果 Python 是 Collections Framework 的等价物,它的功能将等同于 JCF,我相信它会超越它。 ;)
    • 我承认,你是对的。 ;) Python 是集合框架的超集,而不是等价的集合。
    • 红黑树支持的TreeMap类中实现的SortedMap和NavigableMap呢?标准 python 模块中是否有 TreeMap 类似物?
    【解决方案2】:

    除了内置插件,您还可以查看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']
    >>>
    

    【讨论】:

    • 优秀的补充!值得一提的是,集合中的数据类型通常比内置类型“更高级别”,或者有时与内置类型重复功能但具有不同的性能特征。 (例如,虽然dequelist(内置)在很大程度上是兼容的,但对于某些使用模式,它们的表现却大不相同。)
    • 但是,从 2.6 开始,内置函数派生自 collections.ABC,因此您可以依赖 list 作为 collections.Iterable 的正确子类。
    • 我想要一个统一的架构,保证算法可以在各种集合实现上工作,只要实现是相同的“类型”。集合模块似乎提供了这一点。
    • 正如 S.Lott 指出的那样,从 Python 2.6 开始,内置类型就是collections 模块提供的统一架构的一部分。不要仅仅因为来自 Java 的概念偏见而将自己限制在 collections 模块的成员中。
    • 另外,需要注意的是,与 Java 不同的是,Pythonic 方法不是“先看再跳”。您不一定要在执行算法操作之前检查类型。相反,您执行这些操作并让语言的 duck typing 功能确定这些操作是否成功。也被称为“请求宽恕比请求许可更容易”。
    猜你喜欢
    • 1970-01-01
    • 2011-01-04
    • 2011-04-12
    • 2016-10-30
    • 2011-04-13
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多