【python入門】リスト内包表記まとめ【for文を一行で書く】

python

こんにちは、コウキです。

今回は、リスト内包表記に加え、辞書内包表記やジェネレータ式についても紹介します。

リスト内包表記とは、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行でスッキリ書けるだけでなく、速度も速くなります。
使えそうなときは積極的に使っていきましょう!!

でも処理が複雑で、コードが汚くなる場合は使わないほうが良いです。
あとから見返したときに何をしているのかわからなくなったり、バグの原因になるかもしれません。

状況によって使い分けてみてください^^

コメント

タイトルとURLをコピーしました