【问题标题】:Static Arrays in PythonPython 中的静态数组
【发布时间】:2016-06-02 18:08:42
【问题描述】:

我正在学习如何使用 python 编程,并且还在学习理论作为计算机科学课程的一部分。在编程中,我知道我可以通过使用 .append 函数向数组添加额外的变量,但是在我的理论课中,我们被告知数组的大小既不能增加也不能减少。

这在 python 中是如何工作的?

【问题讨论】:

  • 在你的理论课上,你必须学习C++或C。不要混淆..
  • 您的理论课中“数组”的定义似乎更符合python tuple 的定义。通常,数据结构概念是特定于语言的。 C、C++ 和 Java 数组具有固定大小。 Python 有不同的数据结构。
  • Python 列表是与 C 数组完全不同的数据结构。这就是为什么它们被称为list 而不是array。阵列在系统资源方面效率更高。 Python列表更加灵活方便程序员使用。
  • 我看不出这个问题太宽泛了。这里的主要问题似乎是询问 python 列表是如何实现的。这绝不是太宽泛

标签: python arrays python-3.x static


【解决方案1】:

Python 在后台使用可调整大小的向量。他们了解列表中有多少元素以及当前的总容量是多少。当您尝试添加超出集合大小的另一个元素时,它会分配一个具有更多容量的新数组,并使用指向原始支持数组中的项目的指针填充它。这类似于java的ArrayList类型,只不过python中没有办法指定容量

关于实现的详细帖子在这里:http://www.laurentluce.com/posts/python-list-implementation/

它们不是链表; python没有内置链表类型,性能模式不同。

【讨论】:

    【解决方案2】:

    它不是 python,但在您未来的某个时候,您也会在其他语言中看到它。另一个不涉及使用向量或链表的常见解决方法是使用动态数组。

    基本上你创建了一个有限大小的数组。如果用户调用 append 并且您的数组中没有更多空间。您创建一个比旧数组大 2 倍的新数组。然后复制所有元素并附加新元素。

    2x 实际上很重要,因为它使插入时间摊销保持不变。 (虽然这是更高级的算法)

    【讨论】:

      【解决方案3】:

      python 中的列表类似于链表。它们可以动态增长,每个元素都可以指向任何东西。

      如果您对 Python 中的 id 动态和非动态感到好奇,那么您应该阅读有关可变性与不变性的内容: https://codehabitude.com/2013/12/24/python-objects-mutable-vs-immutable/

      【讨论】:

      • Python 列表是链表。
      • Akin != 相同。
      • @Will 他们也不相似。它们都是有序集合,但这并不多。
      • akin: adjective: of similar character. 你的迂腐不会帮助任何人。有些人说话抽象。
      猜你喜欢
      • 1970-01-01
      • 2012-11-15
      • 2011-02-09
      • 2016-01-06
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 2012-05-09
      • 2018-09-03
      相关资源
      最近更新 更多