- 公開日: 2018年08月31日
【Python入門】インクリメントを理解してワンランク上のループ処理を
Pythonの基礎学習で登場する for や while などのループ処理。
はじめの内はコピペで気づかないかもしれませんが、実はそのコードには色々な”意味”が隠させれているかも。
実践的なプログラムやデータベースの理解で欠かせない「インクリメント」についてご紹介させて頂きます。
【Python入門】インクリメントを理解してワンランク上のループ処理を
インクリメント(increment)とは
インクリメントは日本語で「増加」という意味。Python学習では while や for などのループ処理、それから range()
関数で登場してきますね。一つずつ加算していきたい時によく使う機能です。
コードを見てみるとイメージしやすいと思います。
【while文のインクリメント】
number = 1
while number <= 7:
print(number)
number += 1
実行結果
こちらは number が 1からスタートして 7に達するまで処理を繰り返すプログラム。最終コードの number += 1
でインクリメント(増加)を指定していますね。 += 1 ではなく += 2 にすると 2ずつ加算されます。
!! 注意 !!
上記コードでは 7に達するまで 1を加算ですが、 間違って 1を減算する( number -= 1)とプログラムがフリーズもしくはバグります。Jupyter Notebook の場合、 .ipynb ファイルが開かなくなります。
【for文のインクリメント】
リスト内のデータを扱いたい時に for文のインクリメントを知っておくと便利でしょう。
vegetables = ['きゅうり', 'キャベツ', 'なすび', 'にんじん', 'まつたけ']
for i in vegetables:
print(i)
実行結果
リスト内の要素を順番に抽出してくれますね。増加分の数量を制御したい場合は、 range()
関数とリスト機能を合わせて使うと制御可能になります。
【 range()関数のインクリメント】
range()
関数は、数値範囲を指定することのできる関数です。例えば、 list(range(5))
とすると
0 から 5つ番号を数えてくれます。range()
関数で増加分を制御する方法は、range()
内の引数を変えてやればOKです。
まず range(5)
ですが、実はこれ range(0,5,1)
と同じ意味。
rangeのカッコ内は、 range(スタート値, 終わり値, 増加値) になります。
試しに list(range(3,11,2))
とすると
になりますね。
インクリメントを使った実践的なプログラム
Python学習者の中には既に経験済みの方もいらっしゃるかもしれませんが、ファイルの自動作成もインクリメントを意識するとコードの理解が深まり、より一層応用が効くと思います。
例えば、リスト内にたくさん名称が格納されていて、各要素の名前でファイルを作りたいとします。今回は、野菜を例にコードを考えてみました。
vegetables = ['きゅうり', 'キャベツ', 'なすび', 'にんじん', 'まつたけ']
for i in range(len(vegetables)):
f = open(vegetables[i] + ".txt", "w")
f.write(vegetables[i] + "のファイルだよ\n" )
f.close()
実行結果
コードの解説
1行目: vegetables = ['きゅうり', 'キャベツ', 'なすび', 'にんじん', 'まつたけ']
登場する野菜君たちです。今回は 5種類の野菜を変数 vegetables に格納しています。
2行目: for i in range(len(vegetables)):
for 文でここから繰り返し処理が行われます。 i は順番を意味して初期値は 0 ですね。 繰り返し量を意味する in 以下の range(len(vegetables))
は、 range()
と len(vegetables)
に分けて考えるとイメージしやすいです。
まず len(vegetables)
で、リスト vegetables 内にいくつ様子があるかを把握。 len()
関数が使われていますね。
次に range()
関数で 1ずつ数値が増加することを意味します。
つまり 2行目は、登場する野菜の種類に応じて繰り返し量を制御する文であることがわかりますね。
3行目: f = open(vegetables[i] + ".txt", "w")
こちらでは open()
関数で新規ファイルの作成を指示。ファイル名はリスト vegetabels 内の要素を 0番目から抽出するように vegetables[i]
と表現。ファイル形式は .txt 。
4行目: f.write(vegetables[i] + "のファイルだよ\n" )
こちらは省略してもいいのですが、各ファイルに文を自動入力。この値を制御することで、たくさんの人に出す案内状を一瞬で作れたりしますね。
5行目: f.close()
次は違うファイルを取り扱いますので、現在のファイル作業終了を宣言します。
もう一例インクリメントを意識したサンプルをご紹介します。日本の時代を順番に紹介するプログラムです。
jidai = ['旧石器時代', '縄文時代', '弥生時代', '古墳時代', '飛鳥時代', '奈良時代', '平安時代']
for i in range(len(jidai)):
print('【日本の歴史】 {} 番目: {} '.format(i + 1, jidai[i]))
実行結果
コードの解説
1行目: jidai = ['旧石器時代', '縄文時代', '弥生時代', '古墳時代', '飛鳥時代', '奈良時代', '平安時代']
日本の時代をリストに格納して、それを変数 jidai に代入
2行目: for i in range(len(jidai)):
繰り返しの for文で、i は順番で最初は 0 からスタートですね。ループする項目 range(len(jidai))
はまず、 len(jidai)
部分だけを見てみましょう。len(jidai)
これはリスト jidai にいくつ要素が含まれているかを数えてくれます。
試しに
jidai = ['旧石器時代', '縄文時代', '弥生時代', '古墳時代', '飛鳥時代', '奈良時代', '平安時代']
len(jidai)
としてみましょう。
7 という数字が返ってくると思います。リスト jidai の中には 7つ要素が含まれていますのであっていますね。
つまり len(jidai) = 7 と認識しましょう。
そしてその 7 を range()
関数で制御、つまり range(7)。
リスト jidai に含まれる要素数をイチイチ数えるのは面倒ですから、 range(len(jidai))
とすると range(7)
と同じ処理プロセスになりますね。
つまり 2行目の for i in range(len(jidai)):
では、いくつ時代があってその時代を順番に出力する、という処理になります。
3行目: print('【日本の歴史】 {} 番目: {} '.format(i + 1, jidai[i]))
こちらは日本の歴史を順番に紹介するプリント文。format()関数で入力を自動化していることが確認できます。format()関数内の最初の i+1
で時代の順番を出力、「1番目」「2番目」・・・といった具合。format()関数内の 2番目の要素 jidai[i]
でリスト jidai内の要素を指定。jidai[0]
ならリスト内 0番目(人間的には 1番目を意味)の旧石器時代、jidai[1]
ならリスト内の 1番目(人間的には 2番目を意味)の縄文時代を意味といった具合。
このプリント処理が 2行目の range()
で定めた回数、つまり 7回繰り返されます。その結果がコードの実行結果です。
こちらでは各時代をて入力していますが、これを Webスクレイピングと組み合わせると各時代の入力手間を省け、また歴史が修正されても直ぐに正しい情報を反映することが可能。そして日本に限らず世界各国の各時代も直ぐに表示できそうですね。
\AIエンジニアに必要なスキルが身に付く/
まとめ
今回ご紹介したインクリメントは、単なる制御文にとどまらずデータベースの学習時にも必要になります。Python で Webアプリの開発も考えている方は、インクリメント意識しておきたいですね。またデータ処理の自動化を考えている方にとってもインクリメント、欠かせませんね。著書「退屈なことはPythonにやらせよう」の中で登場する「カンニングされても大丈夫!なテスト&回答一発作成(ch08)」でもインクリメント( range()
)登場してきますね。
インクリメント以前に for
とか リストとか理解があやふやな方、一度 Python の基礎学習検討されてみませんか? CodeCampならスマートに Python の基礎を習得できると思いますよ。
- この記事を書いた人
- オシママサラ