整列
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 を使っていたころには,アセンブリ言語で直接 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]