こんにちは、コウキです。
この記事では、リスト内包表記や指定回数繰り返し、辞書の繰り返し、enumerate、zipなど、知っていると役に立つfor文の書き方について紹介します。
for文の基本的な書き方を理解した人の次のステップとして、ぜひ参考にしてみてください。
まだfor文について知らないという人は、この記事を参考にしてみてください。
【Python入門】繰り返しのfor文の基礎【初心者向け】
リスト内包表記
リスト内包表記とは、Python特有の書き方の一つです。
この書き方を使うとfor文を1行で書けるだけでなく、普通のfor文に比べて処理速度も速くなったりします。
リスト内包表記の書き方について見てみましょう。
[値 for 変数 in データの集まり]
これはリストとして値が返ります。
例えば、すべての要素を2倍にするには次のように書きます。
numbers = [1, 2, 3, 4]
numbers2 = [number * 2 for number in numbers]
numbers2の値は以下のとおりです。
numbers = [2, 4, 6, 8]
この書き方はPythonでは本当によく使います。
絶対に覚えて損はない書き方です。
リスト内包表記については以下の記事で詳しく解説しています。
【python入門】リスト内包表記まとめ【for文を一行で書く】
指定した回数だけ繰り返し
次は、ただ単に指定した回数だけ繰り返しを行いたい場合のfor文の使い方です。
C言語などのfor文の使い方に近いと思います。
これについてはrange関数を使うことで実現できます。
早速例を見ていきましょう。
for i in range(5):
print(i)
出力結果は以下のようになります。
0
1
2
3
4
この例では5回繰り返しを行っています。
結果を見ると、取り出した要素は0~4となっていますね。
実はrange関数というのは数字の入ったイテレータを返します。
リストを使って同じように書くと以下のようになります。
number = [0, 1, 2, 3, 4]
for i in number:
print(i)
range関数を使ったときよりも冗長ですね。
なので、指定の回数ループさせたいときはrange関数を使うのが一般的です。
おまけですが、for文の中で i などのような変数を使う必要がない場合は以下の様に書くこともできます。
for _ in range(5):
print('繰り返し')
次は、range関数についてもう少し深堀りしてみましょう。
range関数には2つの使い方があります。
range(stop)
range(start, stop, step)
startは開始の数、stopは終了の数、stepは刻み幅です。
上の例で使ったのは1つ目の使い方ですね。
2つ目の使い方をすると色々な数の並びを作ることができます。
range(3,8)
[3, 4, 5, 6, 7]
range(0, 10, 2)
[0, 2, 4, 6, 8]
range関数をうまく使えば、奇数だけ、偶数だけなども簡単に作れますね。
辞書を使った繰り返し
辞書もfor文で繰り返しすることができます。
辞書の場合はキーと値がセットになっているので、少し工夫する必要があります。
キーと値を取り出すには以下のようにします。
test_results = {'国語': 70, '数学': 90, '理科': 80, '社会': 50, '英語': 60}
for key, value in test_results.items():
print(key, value)
それでは出力結果を見てみましょう。
国語 70
数学 90
理科 80
社会 50
英語 60
キーと値がうまく取り出せていますね。
他にも、キーだけを取り出したいの場合はitems()をkeys()に変えたり、値だけを取り出したい場合はvalues()に変えると良いです。
for key in test_results.keys():
print(key)
for value in test_results.values():
print(value)
enumerateで要素と要素番号を同時に取り出す
要素と要素番号を同時に取り出す方法についても紹介します。
names = ['鈴木', '田中', '小林', '佐藤']
for i, name in enumerate(names):
print(i, name)
出力結果はこのようになります。
0 鈴木
1 田中
2 小林
3 佐藤
僕の場合はファイルの一部を書き換えるときなどによく使います。
例えばこんな感じです。
with open('file.txt') as file:
lines = file.readlines()
for i, line in enumerate(lines):
if '書き換える行に含まれる文字列' in line
lines[i] = '書き換えたい文字列/n'
with open('file.txt', 'w') as file:
file.writelines(lines)
もとのリストを書き換えているのがポイントです。
これを覚えておけばファイルの中身を書き換えるのも簡単ですね。
zipでふたつのリストをペアにして繰り返し
zip別々のリストの要素同士をペアにするときに使います。
説明が難しいので具体例を見てみましょう。
subjects = ['国語', '数学', '理科', '社会', '英語']
results = [70, 90, 80, 50, 60]
for subject, result in zip(subjects, results):
print(subject, result)
出力結果を見てみましょう。
国語 70
数学 90
理科 80
社会 50
英語 60
この例では、科目と点数が別々になっています。
このままではまとめてfor文で回せないので、zip関数を使ってペアにまとめてからfor文で繰り返しをしています。
このように、対応するデータが別々になっているときに役に立ちます。
最後に
今回はPythonのfor文のいろいろなバターンについてまとめてみました。
いろいろなパターンがありますが、全て覚えておく必要はありません。
忘れたときは、こんなやり方があったなと思い出して、また使い方を調べれば良いと思います。
いろいろな使い方を知っておくと、いろいろな場面で役に立つと思うので、ぜひ使ってみてください^^
コメント