如何在Python 2.6中就地对整数数组(不列表)进行排序?其中一个标准库中是否有合适的功能?
换句话说,我正在寻找一个可以做到这样的功能:
>>> a = array.array('i', [1, 3, 2])
>>> some_function(a)
>>> a
array('i', [1, 2, 3])
提前致谢!
答案 0 :(得分:9)
嗯,你不能用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)
:
{{1}}
答案 1 :(得分: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.
答案 2 :(得分:1)
查看array docs,我没有看到排序方法。我认为以下内容与使用标准函数的情况尽可能接近,尽管它确实使用具有相同名称的新对象破坏了旧对象:
import array
a = array.array('i', [1,3,2])
a = array.array('i', sorted(a))
或者,你可以写自己的。
根据评论中的额外信息,你最大限度地记忆,这似乎不适用于你的情况; numpy解决方案是要走的路。但是,我会留下来参考。