如何在Python中原地排序整数数组?

8 投票
3 回答
11079 浏览
提问于 2025-04-16 15:03

怎么在Python 2.6中对一个整数数组(不是列表)进行原地排序呢?有没有合适的函数可以用在标准库里?

换句话说,我想找一个函数,它能像这样做:

>>> a = array.array('i', [1, 3, 2])
>>> some_function(a)
>>> a
array('i', [1, 2, 3])

提前谢谢你!

3 个回答

1

在查看数组文档时,我发现里面没有排序的方法。我觉得下面这个方法是用标准函数能做到的最接近的,虽然它实际上是用一个新对象替换了一个旧对象,名字是一样的:

import array
a = array.array('i', [1,3,2])
a = array.array('i', sorted(a))

或者,你也可以自己写一个排序的方法。

根据评论中提到的你内存使用到极限的情况,这个方法似乎不太适合你;使用numpy的解决方案会更好。不过,我还是把这个方法留着,供你参考。

2

@steven提到了numpy。

Copies vs. in-place operation
-----------------------------
Most of the functions in `numpy` return a copy of the array argument
(e.g., `sort`).  In-place versions of these functions are often
available as array methods, i.e. ``x = np.array([1,2,3]); x.sort()``.
Exceptions to this rule are documented.
10

好吧,你不能用 array.array 来做到这一点,但你可以用 numpy.array 来实现:

In [3]: a = numpy.array([0,1,3,2], dtype=numpy.int)

In [4]: a.sort()

In [5]: a
Out[5]: array([0, 1, 2, 3])

或者,如果你已经有了 array.array,你也可以直接转换过来:

a = array.array('i', [1, 3, 2])
a = numpy.array(a)

撰写回答