sort(),sorted()

python では,整列に関してプログラムを組む必要がありません.
リストのメソッドに sort() が,関数として sorted() がそれぞれ用意されていて,これらを用いるだけで整列が完了します.

それでは,まず,sort() メソッドから

In [1]: a = [100, 53, 19, 8, 81, 37, 16, 25, 44, 22]

In [2]: a.sort(); a
Out[2]: [8, 16, 19, 22, 25, 37, 44, 53, 81, 100]

確かにリスト a が昇順にソートされています.
ただし,sortメソッドはリストを並び替えるだけで何も出力をしません.
そこで,a.sort() に続けて a と書いて,リスト a を出力しました.
それでは,降順にソートするためには,どのようにすれば宜しいでしょうか.

In [3]: a = [100, 53, 19, 8, 81, 37, 16, 25, 44, 22]

In [4]: a.sort(reverse = True); a
Out[4]: [100, 81, 53, 44, 37, 25, 22, 19, 16, 8]

a.sort(reverse = True) と reverse = True を指定することで実現します.

続いて sorted 関数 です.
これは,関数ですから sorted(リスト) という形で使い,戻り値もあります.

In [5]: a = [100, 53, 19, 8, 81, 37, 16, 25, 44, 22]

In [6]: sorted(a)
Out[6]: [8, 16, 19, 22, 25, 37, 44, 53, 81, 100]

In [7]: a
Out[7]: [100, 53, 19, 8, 81, 37, 16, 25, 44, 22]

In [8]: sorted(a, reverse = True)
Out[8]: [100, 81, 53, 44, 37, 25, 22, 19, 16, 8]

このようになります.
メソッドsort() と異なり,出力があります
もう一つ,sorted(a) とした後にも,リスト a の値に変化はありません.
この状態で sorted(a, reverse = True) とすると,今度は降順にソートします.
元のリストには変化を与えず,新たにソートしたリストが欲しいときに使えそうです.
ん~,確かに Python は使いやすいですねぇ.
ところで,この sort()メソッドや sorted()関数は,どのようなアルゴリズムを用いているのでしょうか?
少々気になります.
最近 chatGPT 様にお世話なることが多く,今回もお訊ねいたしました.
Timsort Algorithm なるものを用いているそうです.
因みに,Javascript にもリストに対して整列するメソッドがあり,これも又は Timsort Algorithm を用いているとのことです.

余談になりますが,インタープリタ言語と言えども,コンピュータの処理性能の上がった今や,小規模システムならば何の問題もありません.
かつて N88Basic を使っていたころには,Basic で書いた部分があまりに遅く,アセンブリ言語で直接 vram を操作しないとグラフィックスを動かすことはできませんでした.
ところが,以前,書きましたように Javascript でグラフを動かすことができます.
今後,Python の活躍の場は,益々増えるのであろうと想像できます.

ところで,Python はリスト処理に長けた言語です.
折角ですから,リストに関する幾つかのメソッドを確認しておきたいと思います.

リスト要素の入れ替え,追加,削除

リストに限らず,変数同士の値の入れ替えが超簡単なのです.

a, b = b, a

これで,変数の a と変数 b の値が入れ替わります.

したがって,リスト中の a[1] と a[6] を入れ替える場合には次のようにします.

In [9]: a = [100, 53, 19, 8, 81, 37, 16, 25, 44, 22]

In [10]: a[1], a[6] = a[6], a[1]

In [11]: a
Out[11]: [100, 16, 19, 8, 81, 37, 53, 25, 44, 22]

次に,リストへの要素の追加です.
これには,append()メソッドと insert()メソッドがよく使われます.
append(要素) はスタックの push と同様の働きをし,リストの最後に要素を追加します.
それに対して,insert(index, 要素) はリストの index の位置に要素を追加します.

In [12]: a = [100, 53, 19, 8, 81, 37, 16, 25, 44, 22]

In [13]: a.append(999)

In [14]: a
Out[14]: [100, 53, 19, 8, 81, 37, 16, 25, 44, 22, 999]

In [15]: a = [100, 53, 19, 8, 81, 37, 16, 25, 44, 22]

In [16]: a.insert(3, 999)

In [17]: a
Out[17]: [100, 53, 19, 999, 8, 81, 37, 16, 25, 44, 22]

最後に,リストからの要素の削除です.
これには,pop() メソッド及び del()関数が上記の追加メソッドに対応しています.
pop() は,スタックの pop と全く同じであり,del(list[index]) は list における index の位置の要素を削除します.

In [18]: a = [100, 53, 19, 8, 81, 37, 16, 25, 44, 22, 999]

In [19]: a.pop()
Out[19]: 999

In [20]: a
Out[20]: [100, 53, 19, 8, 81, 37, 16, 25, 44, 22]

In [21]: a = [100, 53, 19, 999, 8, 81, 37, 16, 25, 44, 22]

In [22]: del(a[3])

In [23]: a
Out[23]: [100, 53, 19, 8, 81, 37, 16, 25, 44, 22]

Last modified: Thursday, 19 October 2023, 3:11 PM