web-dev-qa-db-ja.com

リストの一部をその場で並べ替える

リストがあるとしましょう:

a = [4, 8, 1, 7, 3, 0, 5, 2, 6, 9]

これで、a.sort()はリストを所定の位置にソートします。リストの一部だけを並べ替えたい場合はどうなりますか? C++では、次のように書くことができます。

int array = { 4, 8, 1, 7, 3, 0, 5, 2, 6, 9 };
int * ptr = array;
std::sort( ptr + 1, ptr + 4 );

Pythonにも同様の方法はありますか?

41
Headcrab

私はこのように書きます:

a[i:j] = sorted(a[i:j])

これもインプレースソートではありませんが、比較的小さなセグメントには十分高速です。

Pythonはオブジェクト参照のみをコピーするため、実際のインプレースソートに比べて速度ペナルティはそれほど大きくありません。

55
fviktor

anumpy配列の場合、[i, j)インプレース範囲、タイプ:

a[i:j].sort()

例:

>>> import numpy as np
>>> a = np.array([4, 8, 1, 7, 3, 0, 5, 2, 6, 9])
>>> a[1:4].sort()
>>> a
array([4, 1, 7, 8, 3, 0, 5, 2, 6, 9])
24
jfs