Pythonでリスト内包表記、ジェネレーター、辞書内包表記

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())、柔軟性が低く、辞書の推論のように任意のロジックを追加することはできません。

おすすめ

転載: blog.csdn.net/weixin_43901214/article/details/106979641