1.リストの生成
簡単な例として、1〜20の奇数を出力します。
- 一般診療
my_list = []
for i in range(21):
if i % 2 == 1:
my_list.append(i)
print(my_list)
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
- リストの生成
print([i for i in range(21) if i % 2 == 1])
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
より複雑なロジック(1〜20の出力間の奇数を2乗する)
def handel_item(item):
return item * item
print([handel_item(i) for i in range(21) if i % 2 == 1])
# [1, 9, 25, 49, 81, 121, 169, 225, 289, 361]
2.ジェネレーター
まず、リスト内の式が[]
置き換えられ()
、ジェネレーターになります。
my_list = (i for i in range(21) if i % 2 == 1)
print(type(my_list))
print(my_list)
# <class 'generator'>
# <generator object <genexpr> at 0x0000022BDABA64C8>
各要素はforループを介して出力できます
my_list = (i for i in range(21) if i % 2 == 1)
for i in my_list:
print(i)
#1 3 5 7 9 11 13 15 17 19
ジェネレータとリスト式の間の変換
my_list = (i for i in range(21) if i % 2 == 1)
print(my_list)
new_list = list(my_list)
print(new_list)
# <generator object <genexpr> at 0x000002D5D63D64C8>
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
yield
ジェネレータを作成して後で説明することもできます。
3.辞書控除
キー値の順序を交換する
my_dict = {
"bobby1": 22, "bobby2": 23, "ming": 5}
reverse_dice = {
value: key for key, value in my_dict.items()}
print(reverse_dice)
# {22: 'bobby1', 23: 'bobby2', 5: 'ming'}
補足:集合の内包的理解
my_set = {
key for key,value in my_dict.items()}
print(my_set)
print(type(my_set))
# {'bobby1', 'bobby2', 'ming'}
# <class 'set'>
直接使用することはできますがmy_set = set(my_dict.keys())
、柔軟性が低く、辞書の推論のように任意のロジックを追加することはできません。