56

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

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にも同様の方法はありますか?

4

3 に答える 3

78

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

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

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

Pythonはオブジェクト参照のみをコピーするため、実際のインプレースソートと比較して、速度の低下は予想されるほど大きくないことに注意してください。

于 2010-02-16T13:42:31.450 に答える
34

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])
于 2010-02-16T18:59:24.583 に答える