第44回【Python】辞書順に出力 1、辞書順に出力 2

現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 44 回目です。

44 と聞くと、緒方耕一が真っ先に浮かびます。最近は外国人選手の番号のイメージになっていますが。最後につけた日本人は大田泰示だったようで、ああ、まったくイメージがない。巨人では最後まで花開かなかったのは、巨人の育成が悪いのでしょうか、それとも・・・。

それでは、今日も頑張ってみようと思います。

辞書順に出力 1

3 つの文字列

zaipa izapa paiza

があります。辞書順に並べ替え、改行区切りで出力してください。
この三つの文字列を配列に格納し、その配列を並び替える操作を考えて解いてみましょう。

便利な関数があるので、難しくはない。破壊的(sort)に行うか、非破壊的(sorted)に行うかの違いくらい?

Python
L = ["zaipa", "izapa", "paiza"]
L.sort()
for li in L:
    print(li)
VBA
L = Array("zaipa", "izapa", "paiza")
L = Application.WorksheetFunction.Sort(L, 1, 1, True)
For Each li In L
    Debug.Print li
Next

しかし、VBA の sort 関数は Office 365 でしか利用できないらしい。うーん。悩ましい。

VBA(別解)
L = Array("zaipa", "izapa", "paiza")
For i = 0 To UBound(L)
    Cells(i + 1, 1) = L(i)
Next
Range(Cells(1, 1), Cells(UBound(L) + 1, 1)).Sort key1:=Cells(1, 1), order1:=xlAscending, Header:=xlNo
For Each li In Range(Cells(1, 1), Cells(UBound(L) + 1, 1))
    Debug.Print li
Next

ワークシート上で並べ替えを行うパターン。VBA を使うならとても一般的だと思うけれど、どうなんだろう。

辞書順に出力 2

5 つの文字列 s_1, s_2, …, s_5 が半角スペース区切りで与えられます。
5 つの文字列を辞書順に並べ替え、改行区切りで出力してください。


すべてのテストケースにおいて、以下の条件をみたします。

・* s_i (1 ≤ i ≤ 5) は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列


e d a c b

Python では簡単に出来ることがわかっている。VBA もアプリ版で sort 関数が使えれば良いのに。

Python
L = input().split()
L.sort()
for li in L:
    print(li)
VBA
L = Array(Split(Cells(1, 1), " "))
L = Application.WorksheetFunction.Sort(L, 1, 1, True)
For Each li In L
    Debug.Print li
Next

Split 関数で split したものを Array 関数で配列に置き換えるって知りませんでした(恥)。試しにやってみたらできた・・・。試しにやってみるもんだ。厳密には違うっぽいけど・・・。

VBA(別解)
L = Split(Cells(1, 1), " ")
For i = 0 To UBound(L)
    Cells(i + 2, 1) = L(i)
Next
Range(Cells(2, 1), Cells(UBound(L) + 2, 1)).Sort key1:=Cells(2, 1), order1:=xlAscending, Header:=xlNo
For Each li In Range(Cells(2, 1), Cells(UBound(L) + 2, 1))
    Debug.Print li
Next

最後に

まぁ、引き出しはいっぱいあった方が良いですね。ソートする関数を自分で作っておくというのも手かと。もちろん、用意されたものがあるのであれば、活用しない手はないと思います。

Python では sort 関数や sorted 関数、VBA ではワークシート。便利なものはどんどん使おう。

引き続き、よろしくお願いいたします!

Python学習,Python,paiza

Posted by LeoSaki