リストがあるとしましょう:
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にも同様の方法はありますか?
私はこのように書きます:
a[i:j] = sorted(a[i:j])
これもインプレースソートではありませんが、比較的小さなセグメントには十分高速です。
Pythonはオブジェクト参照のみをコピーするため、実際のインプレースソートに比べて速度ペナルティはそれほど大きくありません。
a
がnumpy
配列の場合、[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])