推導(dǎo)式、生成器郁竟、迭代器

1.推導(dǎo)式

推導(dǎo)式又稱(chēng)解析式玛迄,通過(guò)一個(gè)數(shù)據(jù)序列生產(chǎn)另一個(gè)新的數(shù)據(jù)序列的方法

  • 1.1 列表推導(dǎo)式
    • 基礎(chǔ)語(yǔ)法:[元素表達(dá)式,for 元素 in 舊列表]棚亩。
    • 帶條件[元素表達(dá)式蓖议,for 元素 in 舊列表 if 條件表達(dá)式]
    • 嵌套循環(huán)推導(dǎo)式[元素1和2表達(dá)式蔑舞,for 元素1 in 列表1 for 元素2 in 列表2]
lst1 = [2,4,6,8,10]
lst2 = [i**2 for i in lst1]#[4, 16, 36, 64, 100]
lst3 = [i*3 for i in lst1 if i%4==0]#[12, 24]
lst4 = [m*n for m in lst2 for n in lst3]#[48, 96, 192, 384, 432, 864, 768, 1536, 1200, 2400]
lst5 = [m/n for m in lst2 for n in lst3 if m%n==0]#[3.0]
lst6 = [m*n/i for m in lst2 for n in lst3 for i in lst1 if m*n/i >1000]#[1200.0]
  • 1.2 字典推導(dǎo)式
    語(yǔ)法:```{key:value for key,value in items}
lst1 = [2,4,6,8,10]
lst2 = [i**2 for i in lst1]#[4, 16, 36, 64, 100]
dct1 = {key:value for key,value in zip(lst1,lst2)}#{2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
  • 1.3 集合推導(dǎo)式
    語(yǔ)法類(lèi)似列表
import random
s1 = {random.randint(1,100) for i in range(10)}#在1到100之間隨機(jī)生成10個(gè)數(shù),形成一個(gè)集合嘹屯,自動(dòng)去重

2.生成器

  • 2.1 生成器的作用
    主要用于節(jié)約資源攻询,當(dāng)數(shù)據(jù)量比較龐大時(shí),把它全部放進(jìn)容器中比較占用內(nèi)存資源州弟,這時(shí)可以用生成器來(lái)按需讀取數(shù)據(jù)钧栖。
  • 2.2 生成器表達(dá)式
    • 語(yǔ)法(元素表達(dá)式 for 元素 in 數(shù)據(jù)序列)
    g = (i for i in range(20))#<generator object <genexpr> at 0x04BF7488>
    print(g.__next__())#0
    print(g.__next__())#1
    print(g.__next__())#2
    print(g.__next__())#3
    print(next(g))#4
    print(next(g))#5
    for i in g:
        print(i)
    
  • 2.3 yield生成器函數(shù)
    在函數(shù)中添加yield關(guān)鍵字,這是函數(shù)就是一個(gè)生成器婆翔。
"""
日期:2020/8/9 21:09
作者:di0edi
文件名:testify.py
軟件:PyCharm
題目:證明1**3+2**3+……+n**3 = (1+2+……+n)**2
"""
def fn1(n):
    while n > 0:
        yield pow(n,3)
        n -= 1

def fn2(n):
    while n>0:
        yield n
        n -= 1

while True:
    sign = input("是否繼續(xù)驗(yàn)證拯杠,請(qǐng)輸入y/n,y表示繼續(xù)啃奴,n表示退出:")
    if sign == 'n':
        print("再見(jiàn)L杜恪!最蕾!")
        break
    else:
        while True:
            try:
                n = int(input('請(qǐng)輸入一個(gè)整數(shù):'))
            except Exception as e:
                print(f'{type(e)}:{e}')
                continue
            else:
                break
        r1 = 0
        r2 = 0
        for i in range(n):
            r1 += next(fn1(n))
            r2 += next(fn2(n))
        r3 = pow(r2,2)
        if r1 == r3:
            print(f'當(dāng){n=}時(shí)依溯,等式成立!N猎颉黎炉!結(jié)果為{r3}')

這個(gè)程序試過(guò)百萬(wàn)級(jí)別的數(shù)字能等一會(huì)出結(jié)果。

3.迭代器

  • 3.1 迭代
    百度百科上迭代是重復(fù)反饋過(guò)程的活動(dòng)醋拧,其目的通常是為了逼近所需目標(biāo)或結(jié)果慷嗜。每一次對(duì)過(guò)程的重復(fù)稱(chēng)為一次“迭代”,而每一次迭代得到的結(jié)果會(huì)作為下一次迭代的初始值丹壕。
    我理解迭代就是在一定的基礎(chǔ)上不斷重復(fù)某些活動(dòng)庆械,使其基礎(chǔ)不斷厚實(shí),最終達(dá)到由量變到質(zhì)變的改變菌赖。我覺(jué)得的學(xué)習(xí)就是一個(gè)典型的迭代場(chǎng)景干奢。
  • 3.2 迭代器
    在python中迭代器對(duì)象是一個(gè)數(shù)據(jù)流,從序列中的一個(gè)元素開(kāi)始訪問(wèn)盏袄,直到所有的元素被訪問(wèn)完結(jié)束忿峻,而且只能往前不能往后薄啥。
    可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象我們稱(chēng)之為迭代器 Iterator。
  • 3.2 可迭代對(duì)象
    可迭代對(duì)象不一定是迭代器逛尚,可迭代對(duì)象有個(gè)內(nèi)置方法iter()垄惧,該方法可以將可迭代對(duì)象變?yōu)榈鳎钥傻鷮?duì)象用for循環(huán)遍歷時(shí)不需要用索引绰寞,實(shí)際上在遍歷時(shí)到逊,通過(guò)iter()方法將可迭代對(duì)象變?yōu)榈鳎缓笥?strong>next()方法遍歷可迭代對(duì)象滤钱。
    通過(guò)iter()函數(shù)可以將可迭代的變成一個(gè)迭代器觉壶。
    生成器是迭代器的一種。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末件缸,一起剝皮案震驚了整個(gè)濱河市铜靶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌他炊,老刑警劉巖争剿,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異痊末,居然都是意外死亡蚕苇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)凿叠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涩笤,“玉大人,你說(shuō)我怎么就攤上這事盒件×舅” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵履恩,是天一觀的道長(zhǎng)锰茉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)切心,這世上最難降的妖魔是什么飒筑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮绽昏,結(jié)果婚禮上协屡,老公的妹妹穿的比我還像新娘。我一直安慰自己全谤,他們只是感情好肤晓,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般补憾。 火紅的嫁衣襯著肌膚如雪漫萄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,807評(píng)論 1 314
  • 那天盈匾,我揣著相機(jī)與錄音腾务,去河邊找鬼。 笑死削饵,一個(gè)胖子當(dāng)著我的面吹牛岩瘦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窿撬,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼启昧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了劈伴?” 一聲冷哼從身側(cè)響起密末,我...
    開(kāi)封第一講書(shū)人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宰啦,沒(méi)想到半個(gè)月后苏遥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饼拍,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赡模,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了师抄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漓柑。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叨吮,靈堂內(nèi)的尸體忽然破棺而出辆布,到底是詐尸還是另有隱情,我是刑警寧澤茶鉴,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布锋玲,位于F島的核電站,受9級(jí)特大地震影響涵叮,放射性物質(zhì)發(fā)生泄漏惭蹂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一割粮、第九天 我趴在偏房一處隱蔽的房頂上張望盾碗。 院中可真熱鬧,春花似錦舀瓢、人聲如沸廷雅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)航缀。三九已至商架,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谬盐,已是汗流浹背甸私。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留飞傀,地道東北人皇型。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像砸烦,于是被迫代替她去往敵國(guó)和親弃鸦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361