如何在Python中原地排序整数数组?
怎么在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)