Python コンプリヘンション:短い概観

目次

  1. Pythonコンプリヘンション入門
  2. コンプリヘンションの構文
  3. 追加条件を加える
  4. メリットとデメリット
  5. コンプリヘンションとforループの使い分け

やあ、みんな。なんでか最初はPythonのコンプリヘンションがいまいちわからなかったんだ。それで、その代わりにforループを使ってたんだけど、コンプリヘンションってループでやることをオシャレにやってるだけ(実際そんな感じ)って思ってたんだ。でもPythonでコードをもっと書くようになって、小さい操作ごとにループを全部書くのも飽きてきたから、正直に言うとリストに対してだけだけど、コンプリヘンションを使うようになったんだ。それでもずっと、従来のループじゃなくてコンプリヘンションを使う他の利点があるのかって疑問も持ってたんだ。それに答えを見つけたから、それについて書いてみんなに共有しようと思って。じゃ、始めるよ。

1. Pythonコンプリヘンション入門

Pythonのコンプリヘンションは、データのシーケンスを短くて読みやすい方法で生成するためのものだ。これは新しいリスト、辞書、セット、またはジェネレータを作るための1行ループだ。

この上の行はAIによる定義だけど、簡単に言うと、コンプリヘンションは反復可能なデータからリスト、辞書、セット、またはジェネレータを作るために使うんだ。

コンプリヘンションを使う利点は、読みやすくて書きやすく、コードもクリーンで、なによりも効率的で早いことだ。

Pythonはリスト、辞書、セット、ジェネレータの4種類のコンプリヘンションをサポートしている。

2. コンプリヘンションの構文

コンプリヘンションの一般的な構文は [式 for アイテム in 反復可能] だ。これにより、反復可能なものの中の アイテム ごとに の結果から新しいリストが作られる。

コンプリヘンションのタイプごとの例

それぞれのタイプのコンプリヘンションの例を示す:

  • リストコンプリヘンション: [x ** 2 for x in range(10)]
  • 辞書コンプリヘンション: {x: x ** 2 for x in range(10)}
  • セットコンプリヘンション: {x **2 for x in range(10)}
  • ジェネレータコンプリヘンション: (x ** 2 for x in range(10))

3. 追加条件を加える

結果をフィルタリングするためにコンプリヘンションに条件を加えることができる。構文は [式 for アイテム in 反復可能 if 条件] だ。

例えば、 [x ** 2 for x in range(10) if x % 2 == 0] は、偶数だけの平方数のリストを作る。

もし興味があったら、以下の小さな問題も解いてみて。

仮定すると、ある単語のリストと、文字のセットを表す文字列があった場合、提供された文字列にある文字で始まるリストからの単語だけを含む反復可能なものを生成する関数を作成する。

二つのリストの間で共通のアイテムをすべて含むリストを作成する。

4. メリットとデメリット

コンプリヘンションを使う主な利点は、伝統的なループに比べて速く、読みやすく、より効率的だということだ。

でも、論理が複雑な場合は、コンプリヘンションで読んだり理解したりするのが難しくなるという小さな欠点もある。こんな状況では、従来のループを使う方がいいかもしれない。参考までに次のセクションの例をチェックして。

5. コンプリヘンションとforループの使い分け

コンプリヘンションはより簡潔だけど、従来のループの方が柔軟性があり、より複雑なタスクを扱うことができる。

だから、タスクが複雑で、ネストしたループを使うような場合や他の複雑なロジックが関係する場合は、明示的なForループの方が適している。

この小さな例で、コンプリヘンションと伝統的なループを使うことの違いがわかるはずだ。実際にどちらも同じことをしてるけど、その読みやすさをチェックして。コンプリヘンションを見ると、何が起こってるのか理解するのにもっと時間がかかるだろう。

さて、この小さな記事で、コンプリヘンションについての疑問や混乱が解消されて、コンプリヘンションを使う状況で完全に快適になれることを願ってるよ。もし質問があったら、コメントで遠慮なく聞いてくれ。

nested_list = [[1, 2, 3], [4, 6, 8], [9, 10, 12], [13, 14, 15]]
flattened = [num for sublist in nested_list if any(num % 2 != 0 for num in sublist) for num in sublist]
print(flattened)
nested_list = [[1, 2, 3], [4, 6, 8], [9, 10, 12], [13, 14, 15]]
flattened = []

for sublist in nested_list:
    if any(num % 2 != 0 for num in sublist):
        for num in sublist:
            flattened.append(num)

print(flattened)
```<br><br>こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。<br>[https://dev.to/vaddijaswant/python-comprehensions-a-short-overview-39l1](https://dev.to/vaddijaswant/python-comprehensions-a-short-overview-39l1)