Pythonの内包表記まとめ

Pythonの勉強をしていますが、内包表記というのがイマイチつかめていません。

私なりにまとめていこうと思います。内包表記とは、簡単に言うとシンプルなプログラムは1行で書いちゃえというものです。正直、私はまだ慣れていないので、余計に難しい!と感じております。

0から9までの値が入ったリストを作成する

まずはシンプルに0から9までの値が入ったリストを作成する方法です。以下のコードでは、内包表記と内包表記を使わずにfor文を使った方法を記載しています。

list = [i for i in range(10)]
print(list)

list2 = []
for j in range(10):
  list2.append(j)
print(list2)

# Output Result
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

45以下の5の倍数の値が入ったリストを作成する

次に、5の倍数を格納するプログラムを考えてみます。いくつか方法はあると思いますが、その1つが以下のコードです。

list = [i for i in range(1 ,46) if i%5 == 0]
print(list)

list2 = []
for j in range(1, 46):
  if j % 5 == 0:
    list2.append(j)
print(list2)

# Output Result
# [5, 10, 15, 20, 25, 30, 35, 40, 45]
# [5, 10, 15, 20, 25, 30, 35, 40, 45]

20未満の奇数と偶数を調べる

20未満の数字を奇数と偶数に振り分けます。実際にこんなプログラム作らないと思いますが、if文を使うので、練習としてはもってこいです。

odd = [i for i in range(20) if i % 2 == 1]
even = [j for j in range(20) if j % 2 == 0]

print(f"Odd numbers: {odd}")
print(f"Even numbers: {even}")

# Output Result
# Odd numbers: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
# Even numbers: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

リストの値をすべて10倍にする

リストの値をすべて10倍にするプログラムです。単に10倍にすることはないかも知れませんが、通貨変換(例えば日本円を米ドルに換算)したり、消費税計算(例えばすべての値に10%加える計算)等で使えそうですね。

List_A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
List_B = [i * 10 for i in List_A]
print(List_A)
print(List_B)

# Output Result
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
# [10, 20, 30, 40, 50, 60, 70, 80, 90]

総当たりのパターンをリスト化(二重内包表記)

内包表記を二重化することもできます。以下の例ではTomとJohnのじゃんけんで、起こりえるパターンを組み合わせでリストに格納しています。

じゃんけんでは、石と紙と刃物の3通りなので、3×3=9通りとなりますね。

# Rock-paper-scissors
Tom = ["Rock", "Paper", "Scissors"]
John = ["Rock", "Paper", "Scissors"]

matrix = [[tommy, johnny] for tommy in Tom for johnny in John]
print(matrix)
pttn = len(matrix)
print(f"There are {pttn} patterns.")

# Output Result
# [['Rock', 'Rock'], ['Rock', 'Paper'], ['Rock', 'Scissors'], ['Paper', 'Rock'], ['Paper', 'Paper'], ['Paper', 'Scissors'], ['Scissors', 'Rock'], ['Scissors', 'Paper'], ['Scissors', 'Scissors']]
# There are 9 patterns.

2つのリストから辞書を作成する

2つのリストから、それぞれ対応する辞書を作成します。

ポイントになるのはzip()で、これは2つのリストから順番に値を取り出してくれます。それをどう辞書として作成していくかに注目です。

format = ["City", "Street", "Building"]
my_address = ["New York", "Bond", "On Bond"]

dict = {key:value for key, value in zip(format, my_address)}
print(dict)

# Output Result
# {'City': 'New York', 'Street': 'Bond', 'Building': 'On Bond'}

よっさん
  • よっさん
  • 当サイトの管理人。ニューヨークの大学を飛び級で卒業。その後某日系IT企業でグローバル案件に携わる。マレーシアに1.5年赴任した経験を持つ。バイリンガルITエンジニアとしていかに楽に稼ぐか日々考えている。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です