【问题标题】:Why doesn’t 'array' have an in-place sort like list does?为什么'array'没有像list那样的就地排序?
【发布时间】:2017-06-21 19:15:54
【问题描述】:

为什么array 类没有.sort()?我不知道如何直接对数组进行排序。

array.array 类是一个看起来像 C 数组的打包列表。 我想使用它,因为在我的情况下只需要数字,但我需要能够对其进行排序。有什么方法可以有效地做到这一点吗?

【问题讨论】:

  • @Ryan 这不是一个好主意,但我仍然想知道为什么 array.array() 没有 .sort(),
  • @Ryan ,一个可以紧凑表示基本值数组的数组,这意味着没有 py_object,只是 new int[],short[] 或其他东西,它可以很快。如果你想排序,只需在 C 中调用 qsort()。所以我……很困惑
  • 是的,我不知道为什么没有。

标签: python arrays python-3.x sorting


【解决方案1】:

我看不出为什么缺少它的理由,这确实违反了 Python 的包含电池哲学。带有 key 参数的排序函数对于对指向其他对象的索引数组进行排序非常有帮助。

要对数组a 进行排序,您当然可以这样做:

a = array.array("L", sorted(a))

但这不会就位,并且会花费相当多的内存和运行时间,将数组转换为列表并返回数组。

【讨论】:

    【解决方案2】:

    列表是一种数据结构,具有使某些事情变得容易的特征。数组是一种非常容易理解的标准数据结构,并未针对排序进行优化。数组基本上是存储数据集乘积的标准方式。从来没有对它进行排序的概念。

    【讨论】:

    • “列表是一种数据结构,它具有使做某些事情变得容易的特性。” 这不是很具体。 “数组是一种非常容易理解的标准数据结构,并未针对排序进行优化。” 什么。 “数组基本上是存储数据集乘积的标准方式。从来没有对它进行排序的概念。” 什么。
    • 我首先感谢您,因为它具有建设性。但是,对于第二次投诉,恐怕您必须更加具体。数组是一种标准的数据结构。
    • 特别是:“未针对排序进行优化”是我提出质疑的部分。有大量算法用于对具有恒定时间随机读写的序列进行排序,即数组。也许您正在谈论一种不同类型的数组,其定义更接近“存储数据集乘积的标准方式”?不过,array.array(问题似乎是关于什么的)只是一个打包列表。
    • 但数组也是一个标准变量,它采用自然数或它们的笛卡尔积并输出或映射到其他对象。当我们想到“数组”时,任何实现通常都必须产生我们所想到的这种功能。无需进一步。
    • “数组基本上是存储数据集乘积的标准方式。”没有。那是完全错误的。 python 中的array 是整数值的线性序列,允许恒定时间随机访问。这与产品或集合或笛卡尔积无关。
    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2010-09-24
    • 2011-06-07
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多