第46回【Python】重複の削除、配列の最大最小

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

はじめに

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

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

爬虫類は得意じゃないです。キャンプ場でたまに見かけるけれど、そーっと逃げるようにしています。そんな LeoSaki(旦那)が蛇(Python)にはまるなんて。

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

重複の削除

以下のような数列があります。

1 3 5 1 2 3 6 6 5 1 4

この数列から数の重複をなくし、昇順にし改行区切りで出力してください。
数列を配列に格納し、並び替える操作や重複を削除する操作を考えて解いてみましょう。

重複の削除にも便利な方法がある。知っているかどうかが大きな分水嶺。

Python
L = [1, 3, 5, 1, 2, 3, 6, 6, 5, 1, 4]
setL = set(L)
sortedSetL = sorted(setL)
for li in sortedSetL:
    print(li)
VBA(Office365ならば)
L = Array(1, 3, 5, 1, 2, 3, 6, 6, 5, 1, 4)
L = Application.WorksheetFunction.Unique(L, True)
L = Application.WorksheetFunction.Sort(L, 1, 1, True)
For Each li In L
    Debug.Print li
Next
VBA(正攻法?)
L = Array(1, 3, 5, 1, 2, 3, 6, 6, 5, 1, 4)
For i = 0 To UBound(L)
    Cells(i + 1, 1) = L(i)
Next
Range("A1").CurrentRegion.RemoveDuplicates (Array(1))
Range("A1").CurrentRegion.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlNo
For Each Rng In Range("A1").CurrentRegion
    Debug.Print Rng
Next

dictionary を利用する方法が真っ先に思い浮かびますが、その後の並べ替えまで考えたら、こっちの方が早いのではと思い。ワークシート上で先に並べ替えて、末尾から順番にすぐ上のセルと比較して、等しければ削除、みたいなのが昔ながらの正攻法なのかもしれない。

配列の最大最小

1 行目に整数 N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数のうち、最大の数と最小の数を半角スペース区切りで出力してください。
N 個の整数を大きい順や小さい順に並び替える操作を考えて解いてみましょう。


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

・* N は 1 以上 10 以下の整数
・* a_i (1 ≤ i ≤ N) は 1 以上 100 以下の整数


5
1 3 5 2 4

真っ先に頭に思い浮かぶのは、max 関数や min 関数を使って解く方法かと。今回は並べ替えを利用して出せという話のよう。

Python
N = int(input())
L = input().split()
L.sort()
print(L[-1],L[0])
VBA
N = Cells(1, 1)
L = Array(Split(Cells(2, 1), " "))
L = Application.WorksheetFunction.Sort(L, 1, 1, True)
Debug.Print L(UBound(L)) & " " & L(1)

最後に

最後は少し力尽きた感があり、Office 365 でしか使えない sort 関数を利用して解いてしまった。ソート用の関数を作るなり、ワークシートを利用するなりして、正攻法で解く方法も考えたい。いずれ。

いろいろな方法を知っておくことの重要性は、何度も書いている。実務上、あのやり方がある、あのやり方がある、と人より早く回答を導き出せることが多い。うちの若手に説明しても、なかなか理解してもらえないところが苦しいところ。

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

Python学習,Python,paiza

Posted by LeoSaki