Как отсортировать целочисленный массив на месте в Python? - PullRequest
5 голосов
/ 04 апреля 2011

как можно отсортировать целочисленный массив (, а не список) на месте в Python 2.6? Есть ли подходящая функция в одной из стандартных библиотек?

Другими словами, я ищу функцию, которая бы выполняла что-то вроде этого:

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

Заранее спасибо!

Ответы [ 3 ]

9 голосов
/ 04 апреля 2011

Ну, вы не можете сделать это с 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)
2 голосов
/ 04 апреля 2011

@ Стивен упомянул 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.
1 голос
/ 04 апреля 2011

Глядя на массив документов , я не вижу метода сортировки. Я думаю, что следующее примерно настолько близко, насколько это возможно, используя стандартные функции, хотя это действительно забивает старый объект новым с тем же именем:

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

Или вы можете написать свой собственный.

С дополнительной информацией из комментариев, что вы исчерпываете память, это кажется неприменимым для вашей ситуации; бесшумное решение - путь. Однако я оставлю это для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...