Pythonではリストを作成する方法がいくつかありますが、その中の1つに「内包表記」というものがあります。内包表記はあまり見慣れないかもしれませんがコードを簡潔に記述できるので、うまく使うとソースコードがスッキリします。
今回はリスト内包表記について説明します。

リスト内包表記の基本

例えば、1から10までの数字に2をかけたリストを作成するとします。普段for文でリストを作成する場合は以下のように記述します。

list1 = []
for x in range(1, 11):
    list1.append(x * 2)
print(list1)

実行結果

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

これをリスト内包表記で表すと以下のようになります。

list2 = [x*2 for x in range(1,11)]
print(list2)

実行結果

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

リスト内包表記ではまず各要素の値を記述し、その後ろに通常と同じfor文を記述します。そして全体を[]で括ります。これがリスト内包表記になります。
リスト内包表記を使えばリストの生成を簡潔に記述することができます。さきほどのようにfor文を使って生成するほか、すでにあるリストから新しいリストを作ることもできます。以下のコードは1から10までの数字が入ったリストから、そのリストの各要素を2倍にした新しいリストを生成しています。

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list1 = [x*2 for x in list1]
print(new_list1)

実行結果

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

if文を使う

リスト内包表記ではif文を同時に使うことで、条件に合う要素だけを持ったリストを作ることができます。リスト内包表記でif文を使うには、さきほどのfor文のブロックの後ろにif文を記述します。
例えば1から10までの数字のうち、偶数だけを取り出して2倍にしたリストを作るには以下のように記述します。

list2 = [x*2 for x in range(1,11) if x % 2 == 0]
print(list2)

実行結果

[4, 8, 12, 16, 20]

zip関数で2つのリストを同時に扱う

リスト内包表記で2つのリストを同時に扱う場合はzip関数を使います。以下の例では「2つのリストからzip関数で取り出した要素同士をかけたもの」を要素とするリストを生成しています。

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [x * y for x, y in zip(list1, list2)]
print(list3)

実行結果

[4, 10, 18]

その他の内包表記

セット内包表記

リストの代わりにセットを生成する内包表記です。セットの場合は[]の代わりに{}で囲むだけで記述できます。

set1 = {x*2 for x in range(1,11)}
print(set1)

実行結果

{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}

辞書内包表記

リストの代わりに辞書を生成する内包表記です。辞書の場合は要素の値を記述する部分で「キー:値」といったようにコロンを使ってキーと値を記述し、全体をセットと同様に{}で囲みます。

dict1 = {x:x*2 for x in range(1,11)}
print(dict1)

実行結果

{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18, 10: 20}

【おすすめ記事】
Pythonの本・参考書の評判
【無料で使える】Pythonを勉強できる学習サイト7つ
【Python入門】JSON形式データの扱い方
Pythonを使うなら知っておくべき!便利なライブラリ13選