はじめに
AtCoderに存在するAPG問題をPythonで解いてみます。
こちらPython始めたての初心者なので、「もっといい書き方あるよ!」等がありましたら教えていただけると大変助かります。
また、なぜ4.01と4.04のみかというと、Pythonでできる箇所がこの2つだけだと伺ったためです。C++はいろいろできてすごいなぁ…
4.01.includeディレクティブ
Pythonでいう「import」のことだ!
C++でいう#include <(ファイル名)>
がPythonでいうimport (モジュール名)
ということですね。
C++だと、#include <bits/stdc++.h>
を入れないと出力動作ができないらしい。Pythonではモジュールを入れなくてもprint()
できるよ。
あと、C++では自作のソースファイルをincludeして、別のソースコードで使用することができる。
え、Pythonだと別のファイルのソースってどうやって持ってくるんだろう……調べます。
方法いっしょだ…。inportしたいファイルの「~.py(つまり拡張子)」を抜いたファイル名をimport (拡張子を抜いたファイル名)
という形でもってくるだけ。いつもといっしょ。
【参考】includeディレクティブ
import b
print(b.f(10)) #100
def f(x):
return x*x #xを2乗するだけ
b.pyがimportされたa.pyは下のコードとやっていることが同じ。
def f(x):
return x*x
print(f(10)) #100
モジュールをimportするときも、「モジュール名.py」っていう色々な関数が書かれているソースファイルから関数を持ってきてるイメージなのか……あまり意識したことがなかった。良い勉強。
4.04.イテレータ
イテレータってなんだ……?
全くわからない。なんかlistみたいなものっぽいけどなんだろうこれ。
sort()
をするときに使う……?なんで……?元の配列はどうなってるんだ……?
わかった!!!!!!sort()
って元の配列がソートされるわけじゃなくて、イテレータっていう元の配列のコピーをソートしてますよってことなのでは……?
sort()
しても元の配列がsortされるわけじゃないもんね。
え、けどイテレータと配列って何が違うんだ?
【イテレータのいいところ】
- 配列以外のデータ構造でも同じように扱える・整理できる
なるほど、つまり配列でも辞書型でもイテレータにしてしまえば同じ操作で位置の操作等ができるってことですか……?ちょっと難しいですね……イメージが難しい……
listとdictでイテレータを作ってやってみます…
#listで作成
list = [1,2,3,4,5,]
iter_list = iter(list)
#dictで作成
dict = {"first":1,"second":2,"third":3,"fourth":4,"fifth":5}
iter_dict = iter(dict)
for i in iter_list:
print(i) # 1 2 3 4 5
for i in iter_dict:
print(i) # first second third fourth fifth
あれ、dictのほうだとkeyが出力されちゃう。何か間違えたか。あれ。
一旦泥沼にはまりそうなので、とりあえず
- イテレータはlistやdictとかのコンテナ要素をコピーして、同じような扱いにすることができる(要検証)(イテレータをまだよくわかっていない)
- sort()のときとかに使われてるよ。
ちょっと日を改めて読み返します……