Pythonの内包表記まとめ
2022/2/28 2022/4/15
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'}