day12のpythonベースジェネレータ、ジェネレータ式、辞書リストセット式が導出しました

A、発電機

ジェネレータイテレータは基本的にされて
私たち自身のPythonコードのビルドデータ構造を持つビルダー、およびイテレータはPythonが提供され、または来る換算:唯一の違いはあります。

  • 三つの方法を取得するジェネレータ

    1.ジェネレータ機能

    2.ジェネレータ式

    提供される内部3.python

  • ジェネレータ関数ジェネレータを取得

def func():
    yield 3
    yield 4
ret = func()
print(ret)  # <generator object func at 0x0000025DF985F580>生成器对象

print(next(ret))  # 3
print(next(ret))
'''
3
4
'''  # 一个next对应一个yield
  • リターンと収量差:

    リターン機能が終了し、そこだけリターン機能があり、システムなどによって実行される機能に値を返します。

    長い収率が、それは代わりに関数の生成関数であるよう関数

    ジェネレータ関数は次収量、収率終了しない機能に対応し、複数をもたらすことができます

def gen_fun():
    for i in range(1,5001):
        yield i
ret = gen_fun()

for i in range(200):
    print(next(ret))

for i in range(100):
    print(next(ret))
  • からの収量
def func():
    li = [1, 2, 3, 4, 5]
    yield from li  # 将li这个列表变成了迭代器返回

ret = func()
print(next(ret))
print(next(ret))
print(next(ret))
print(next(ret))
print(next(ret))
def func():
    list1 = [1, 2, 3, 4, 5]
    list2 = [6, 7, 8]
    yield from list1
    yield from list2

g = func()
for i in range(8):
    print(next(g))

第二に、ジェネレータ式は、式のリストを導出しました

  • リスト内包

コードの定期的なラインの複雑なリストの構築

  1. 循環モード:[反復可能で変数の変数(処理後変数)]
li = [i for i in range(1, 11)]
print(li)
# 1.将10以内的所有整数的平方写入列表
list1 = [i ** 2 for i in range(1, 11)]
print(list1)
# 2.100以内所有偶数
list2 = [i for i in range(2, 101, 2)]
print(list2)
# 3.从Jason的女朋友1号到Jason的女朋友100号写入列表
list3 = [f'Jason的女朋友{i}号' for i in range(1, 101)]
print(list3)
# 4.构建[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
list4 = [i for i in range(1, 11)] + list('JQKA')
print(list4)
  1. フィルタモード:[条件であれば反復可能で変数の変数(処理後変数)]
# 1.100以内能被3整除的数字
list1 = [i for i in range(101) if i % 3 == 0]
print(list1)
# 2.过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
li = ['jason', 'a', 'carly', 'cc', 'dog']
list2 = [i.upper() for i in li if len(i) >= 3]
print(list2)
# 3.筛选出来含有两个'e'的所有的字符串全部大写
list3 = [['jason', 'a', 'ceely', 'cc', 'eeg', 'aece'], ['eye', 'uuueee', 'sex']]
list4 = [j.upper() for i in list3 for j in i if j.count('e') == 2]
print(list4)
  • ジェネレータ式:

唯一の違いは、[]()が、発電機は、式のメモリセーブ導出さへの書き込み由来のリストであります

list1 = (i for i in range(101) if i % 3 == 0)
print(list1)
print(next(list1))
print(next(list1))
print(next(list1))

表現と理解の区別のリストを生成します:

1.文言[]及び()
反復処理可能(イテラブル)およびイテレータ(反復子)2.本質的な違い

  • 辞書の導出
list1 = ['k1', 'k2', 'k3']
list2 = ['v1', 'v2', 'v3']
dic = {list1[i]: list2[i] for i in range(len(list1))}
print(dic)
  • セットの導出
set1 = {i for i in range(1, 11)}
print(set1)

おすすめ

転載: www.cnblogs.com/west-yang/p/12602571.html