こんにちは、コウキです。
今回は、リスト内包表記に加え、辞書内包表記やジェネレータ式についても紹介します。
リスト内包表記とは、Python特有の書き方の一つです。
この書き方を使うとfor文を1行で書けるだけでなく、普通のfor文に比べて処理速度も速くなったりします。
この書き方はPythonでは本当によく使います。
絶対に覚えて損はない書き方です。
リスト内包表記の基礎
リスト内包表記の書き方について見てみましょう。
[値 for 変数 in データの集まり]
これはリストとして値が返ります。
例えば、すべての要素を2倍にするには次のように書きます。
numbers = [1, 2, 3, 4]
numbers2 = [number * 2 for number in numbers]
numbers2の値は以下のとおりです。
numbers = [2, 4, 6, 8]
このように、リストの中身をまとめて変更するときに便利ですね。
リスト内包表記でif文を使う
リスト内包表記でif文を使うこともできます。
これを使えば、フィルターも簡単に実装できます。
if文を使う場合はこのように書きます。
[値 for 変数 in データの集まり if 条件式]
numbers = [20, 30, 66, 40, 77, 10, 2, 90, 33, 2, 1, 89]
numbers2 = [number for number in numbers if number >= 50]
これでnumbers2の中は50以上の値だけになりました。
[66, 77, 90, 89]
リストの中から欲しいデータだけ取り出すときはif文を使いましょう。
リスト内包表記でif-else文を使う
Pythonの条件演算子を使えば、if-else文も使うことができます。
[真のときの値 if 条件式 else 偽のときの値 for 変数 in データの集まり]
実際に例を見てみましょう。
result = [(i, '偶数') if i % 2 == 0 else (i, '奇数') for i in range(5)]
resultの中身は以下のようになります。
[(0, '偶数'), (1, '奇数'), (2, '偶数'), (3, '奇数'), (4, '偶数')]
辞書内包表記
辞書でも内包表記を使うことができます。
{キー: 値 for 変数 in データの集まり}
これは、60点以上の科目のみ取り出す例です。
リスト内包表記と同じでif文も使うことができます。
test_results = {'国語': 30, '算数': 80, '理科': 90, '社会': 50, '英語': 70}
test_results2 = {key: value for key, value in test_results.items() if value >= 60}
test_results2の出力結果はこうなります。
{'算数': 80, '理科': 90, '英語': 70}
ジェネレータ式
ジェネレータ式を使うと、簡単にジェネレータを作成できます。
ジェネレータはリストと違って、値をメモリに格納せず、取り出すたびに生成しているので、メモリの消費を抑えることができます。
ジェネレータ式は以下のように書きます。
(値 for 変数 in データの集まり if 条件式)
リスト内包表記と使い方はほとんど同じですが、データ数が多い場合はこちらを使った方が良さそうですね。
最後に
今回はリスト内包表記、辞書内包表記、ジェネレータ式について紹介しました。
これらはfor文と違い、1行でスッキリ書けるだけでなく、速度も速くなります。
使えそうなときは積極的に使っていきましょう!!
でも処理が複雑で、コードが汚くなる場合は使わないほうが良いです。
あとから見返したときに何をしているのかわからなくなったり、バグの原因になるかもしれません。
状況によって使い分けてみてください^^
コメント