元エンジニアのコーチ、ファシリテーターです。
こんにちは。
前回は変数、関数や制御構文を動かしてみて、
最後にリストという配列?リスト?の挙動をみました。
タプル型の不変という特性で、コードの可読性と処理速度を上げるらしいですが、
どれくらい処理速度変わるんでしょうかね?
Javaプログラマが退屈なことをPythonにやらせようとした①
今回も書籍「退屈なことはPythonにやらせよう」を読み進めてみましたよ。
ファイル動かしたり、ブラウザ操作したりとだんだん処理っぽくなってきました。
辞書型
KeyValueペアで値を保持する変数ですね。
DictionaryとかMap型ですね。
keys(),Values(),items()関数で、それぞれ繰り返し処理できる。
面白いのが、値の設定と取得が配列とほぼ同じで関数を介さずにアクセスできる。のと
keyが存在していなかったら初期値設定する関数が用意されているところ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#javaでHashMap #インスタンス生成と初期化 Map<String, String> map = new HashMap<>(); map.put("apple","りんご"); map.put("orange","おれんじ"); #key=apple の値を取得 <span class="crayon-sy"><span class="crayon-i">System</span>.<span class="crayon-i">out</span>.<span class="crayon-e">println</span>(map.get("apple"));</span> #keyValueペアで繰り返し処理 for (<span class="crayon-i">Map</span><span class="crayon-sy">.</span><span class="crayon-i">Entry</span><span class="crayon-h"><</span><span class="crayon-t">String</span><span class="crayon-sy">,</span> <span class="crayon-t">String</span><span class="crayon-h">></span> <span class="crayon-i">entry</span> <span class="crayon-sy">:</span> <span class="crayon-i">map</span><span class="crayon-sy">.</span><span class="crayon-e">entrySet</span><span class="crayon-sy">(</span><span class="crayon-sy">)){ <span class="crayon-i">System</span>.<span class="crayon-i">out</span>.<span class="crayon-e">println</span>(<span class="crayon-i">entry</span>.<span class="crayon-e">getKey</span>() + <span class="crayon-s">" : "</span> + <span class="crayon-i">entry</span>.<span class="crayon-e">getValue</span>()); } </span> |
1 2 3 4 5 6 7 8 9 10 11 |
#Pythonで辞書型 #初期化 map = {'apple': 'りんご', 'orange': 'オレンジ'} #key=apple の値を取得 print(map['apple']) #keyValueペアで繰り返し処理 for k, v in map.items(): print(k + ' : ' + v) |
続いてkeyの存在検証してから値設定をする。
指定するkeyが登録されていなければ、”あおりんご”の文字を設定していきます。
1 2 3 4 5 |
#Java if (!(map.containsKey("apple"))){ map.put("apple", "あおりんご"); } |
1 2 3 |
#Python map.setdefault('apple', 'あおりんご') |
うん。楽だね、こりゃ~
文字列操作
コメント、複数行コメントの書き方とか文字列関数の紹介がありました。
大文字、小文字への変換や、検証関数の
upper(),lower(),isupper(),islower()
元の文字列の変換後や、検証結果を戻り値として返す関数です。
元の文字列を直接変える事はないよ。と書かれてましたけど。
そりゃそうだよね、と違和感なし。
ちょっと面白さを感じたのがisX関数とテキスト整形関数。
- isalpha()・・・1文字以上の英文字のみで構成されているか?
- isalnum()・・・1文字以上の英文字または数字で構成されているか?
- isdecimal()・・・1文字以上の数字のみで構成されているか?
- isspace()・・・スペース、タブ、改行文字のみで構成されているか?
- istitle()・・・大文字で始まり、残りは小文字の英単語か?
テキスト整形、文字列の左や右またはその両方にスペース埋めてくれる関数。
全て引数に整形後の文字数をいれます。
- rjust()・・・右寄せの文字列を生成する。(文字列の左側をスペース埋め)
- ljust()・・・左寄せの文字列を生成する。(文字列の右側をスペース埋め)
- center()・・・中央寄せの文字列を生成する。(文字列の左右にバランス良くスペース埋め)
rjust()、ljust()は固定長データ作成に使えそうですね。
(今も固定長データ需要あるの?)
文字列成形関数ですが、元の文字列数よりも小さい数値を指定しても、何も起こりません。
1 2 |
'hello-world'.rjust(5) ---> 'hello-world' 'hello-world'.rjust(20) ---> ' hello-world' |
正規表現
正規表現はそれだけで書く事多いので、別記事で。
raw stringで読みやすくなります。
ファイル操作
Windows,Mac,Linuxなどの様々なOSで動かす前提なので、
フォルダ区切りを表す文字列がスラッシュかバックスラッシュなのか?
意識する事なく結合できます。pythonも。
1 2 3 4 5 |
#Python import os filepath = os.path.join('usr', 'bin', 'spam') testFile = open(filepath) |
javaと比べて大きく違う所を感じなかったので、軽めに。
shelveモジュールを使うと、バイナリファイルで変数値を残しておけるよ。
とか、zipfileモジュール使うとアーカイブファイルのzipを作成、展開にファイル追加もできるよ。
とあったけど、これも別記事で・・・
ファイル操作ができるようになると、自動処理に幅が広がって楽しくなってきました。
コメント