再看列表

列表和列表的內(nèi)存處理

列表是python組合數(shù)據(jù)類型中使用較多的類型之一,以其對(duì)批量數(shù)據(jù)提供友好的訪問支持而被廣大開發(fā)人員鐘愛

在程序開發(fā)過程中飞涂,對(duì)于列表的操作有兩種不同的情況需要考慮:

1旦部、我們需要一個(gè)存放了大量的有規(guī)律的數(shù)據(jù)的列表祈搜,這個(gè)列表怎么定義

2、列表中存儲(chǔ)的數(shù)據(jù)量過大士八,會(huì)不會(huì)對(duì)內(nèi)存產(chǎn)生影響

第一個(gè)問題:

我們需要一個(gè)存放了大量的有規(guī)律的數(shù)據(jù)的列表容燕,這個(gè)列表怎么定義?

解決方法:列表的聲明推導(dǎo)式

推導(dǎo)式:按照一定的規(guī)則進(jìn)行推導(dǎo)產(chǎn)生對(duì)應(yīng)的數(shù)據(jù)

語法:變量 = [推導(dǎo)表達(dá)式]

例如:

添加一個(gè)0~20的自然數(shù)序列

my = [x for x in range(0, 20)]

輸出結(jié)果:

圖片1.png

附帶條件的列表推導(dǎo)式:取偶數(shù)

my2= [x for x in range(0, 20) if x % 2 == 0]

輸出結(jié)果:

圖片2.png

附帶運(yùn)算的列表推導(dǎo)式:求平方

my3 = [x**2 for x in range(0, 10)]

輸出結(jié)果:

圖片3.png

附帶多項(xiàng)數(shù)據(jù)的列表推導(dǎo)式:兩個(gè)列表的相加

my4= [x + y for x in range(0, 5) for y in range(0,2)]

輸出結(jié)果:

圖片4.png

列表的推導(dǎo)式的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):語法簡(jiǎn)單曹铃,可以通過包含邏輯條件生成一個(gè)符合條件的列表

缺點(diǎn):邏輯過于簡(jiǎn)單缰趋,不能生成條件更加復(fù)雜的更加準(zhǔn)確的列表

第二個(gè)問題:

列表中存儲(chǔ)的數(shù)據(jù)量過大,會(huì)不會(huì)對(duì)內(nèi)存產(chǎn)生影響陕见? 會(huì)導(dǎo)致對(duì)內(nèi)存的大量消耗

兩個(gè)方面:

沒有規(guī)律的大量數(shù)據(jù):

解決方案:不要放在列表中秘血,放在數(shù)據(jù)庫等中,通過列表每次讀取一小部分评甜,處理完繼續(xù)讀取

有規(guī)律的大量數(shù)據(jù):

解決方案:不要直接通過列表操作灰粮,而是通過列表生成器操作

生成器:在程序執(zhí)行運(yùn)算到該代碼時(shí),才會(huì)執(zhí)行運(yùn)算得到結(jié)果

生成器語法結(jié)構(gòu)和推導(dǎo)式語法結(jié)構(gòu)及其類似

一個(gè)基本生成器:
生成 0~10 自然數(shù)序列的數(shù)據(jù)

my_generator = (x for x in range(0, 10))

輸出結(jié)果:產(chǎn)生一個(gè)object對(duì)象

圖片5.png
推導(dǎo)式與生成器的區(qū)別:

推導(dǎo)式:直接產(chǎn)生包含所有數(shù)據(jù)的列表

生成器:產(chǎn)生了一個(gè)生成器對(duì)象忍坷,包括算法

使用生成器中的數(shù)據(jù):

方法一:

通過系統(tǒng)內(nèi)建函數(shù)next()獲取生成器中下一個(gè)數(shù)據(jù)

print(next(my_generator)) #輸出結(jié)果: 0  
print(next(my_generator)) #輸出結(jié)果: 1  
print(next(my_generator)) #輸出結(jié)果: 2  
print(next(my_generator)) #輸出結(jié)果: 3
方法二:

通過類型的next()魔法方法粘舟,直接獲取下一個(gè)數(shù)據(jù)(接著上一個(gè)數(shù)據(jù)繼續(xù)往下輸出)

print(my_generator.__next__()) #輸出結(jié)果: 4  
print(my_generator.__next__()) #輸出結(jié)果: 5  
print(my_generator.__next__()) #輸出結(jié)果: 6  
print(my_generator.__next__()) #輸出結(jié)果: 7
總結(jié):

列表生成器是對(duì)與列表推導(dǎo)式以及列表本身進(jìn)行的極度的優(yōu)化

列表生成器中的表達(dá)式與列表推導(dǎo)式中的表達(dá)式功能相同

遇到少量數(shù)據(jù)的時(shí)候用列表處理,大量數(shù)據(jù)用列表生成器處理

迭代器:

什么是迭代對(duì)象:

collections.Iterable 迭代對(duì)象

程序中任何可以通過next()操作的對(duì)象或者可以通過for循環(huán)遍歷的對(duì)象都是迭代對(duì)象

什么是迭代標(biāo)識(shí):

collections.Iterator 迭代標(biāo)識(shí)

迭代對(duì)象中有一個(gè)迭代標(biāo)識(shí)佩研,迭代標(biāo)識(shí)可以通過迭代對(duì)象中的iter()函數(shù)方法獲得

迭代標(biāo)識(shí)就是每一次迭代的過程中柑肴,來記錄當(dāng)前運(yùn)行到第幾步了的標(biāo)識(shí)

迭代器:

在迭代的過程中,迭代對(duì)象加上迭代標(biāo)識(shí)合起來被稱為迭代器

迭代器包含了可迭代對(duì)象旬薯,可迭代標(biāo)識(shí)

問題:

迭代器和生成器之間的區(qū)別:

迭代器:

PYTHON中在collections集合模塊中提供了迭代器對(duì)象

迭代器由兩部分組成:

迭代對(duì)象:collections.Iterable

用于循環(huán)遍歷的迭代對(duì)象晰骑,它是一個(gè)Iterable類型的對(duì)象,

迭代標(biāo)識(shí):collections.Iterator

用于記錄迭代狀態(tài)的迭代標(biāo)識(shí)绊序,通過Iterator對(duì)象進(jìn)行操作

生成器:

PYTHON中提供的一種可以將程序算法表達(dá)式包含起來的一個(gè)用于產(chǎn)生列表數(shù)據(jù)的對(duì)象
在操作過程中通過next()函數(shù)進(jìn)行調(diào)用硕舆,算法表達(dá)式產(chǎn)生下一個(gè)數(shù)據(jù)用于程序運(yùn)算的操作對(duì)象

迭代器:用來遍歷數(shù)據(jù)

生成器:用來產(chǎn)生數(shù)據(jù)

生成器:用來創(chuàng)建一個(gè)對(duì)象,包含一個(gè)表達(dá)式骤公,推導(dǎo)一個(gè)數(shù)據(jù)

迭代器:用于對(duì)可迭代對(duì)象循環(huán)遍歷

自定義類型的對(duì)象來完成可迭代操作:

我們可以在自定義類型中抚官,通過重寫iter()方法,讓自定義對(duì)象返回一個(gè)迭代器對(duì)象阶捆,這樣也就可以讓自定義類型的對(duì)象來完成可迭代操作

class Person:

    def __init__(self, fav):
        self.fav = fav

    def __iter__(self):
        print("獲取迭代對(duì)象的函數(shù)被執(zhí)行了")
        return iter(self.fav)

p = Person(["路明非", "楚子航", "凱撒", "芬格爾"])

for x in p:
    print(x)

輸出結(jié)果:

圖片6.png

思考題:

  1. list/set/dict/tuple是否是Iterable類型凌节,是否是Iterator類型
    Iterable類型?否
    Iterator類型洒试?否
  2. [1,2,3]是否是Iterable類型刊咳,是否是Iterator類型
    Iterable類型?是
    Iterator類型儡司?否
  3. class User:..是否是Iterable類型娱挨,是否是Iterator類型
    Iterable類型?否[如果類型重寫了iter()函數(shù)并返回了迭代對(duì)象:是]
    Iterator類型捕犬?否
  4. 什么是迭代器跷坝?
    迭代器是用來標(biāo)識(shí)一個(gè)對(duì)象是否可以循環(huán)遍歷酵镜,并且可以記錄循環(huán)遍歷狀態(tài)的對(duì)象
    主要通過collections.Iterable類型來判斷是否是可以迭代的類型
    在迭代過程中,通過collections.Iterator來記錄迭代狀態(tài)

如有錯(cuò)誤柴钻,敬請(qǐng)指出淮韭!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贴届,隨后出現(xiàn)的幾起案子靠粪,更是在濱河造成了極大的恐慌,老刑警劉巖毫蚓,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件占键,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡元潘,警方通過查閱死者的電腦和手機(jī)畔乙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翩概,“玉大人牲距,你說我怎么就攤上這事≡勘樱” “怎么了牍鞠?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)评姨。 經(jīng)常有香客問我皮服,道長(zhǎng),這世上最難降的妖魔是什么参咙? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮硫眯,結(jié)果婚禮上蕴侧,老公的妹妹穿的比我還像新娘。我一直安慰自己两入,他們只是感情好净宵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著裹纳,像睡著了一般择葡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剃氧,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天敏储,我揣著相機(jī)與錄音,去河邊找鬼朋鞍。 笑死已添,一個(gè)胖子當(dāng)著我的面吹牛妥箕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播更舞,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼畦幢,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了缆蝉?” 一聲冷哼從身側(cè)響起宇葱,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刊头,沒想到半個(gè)月后黍瞧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芽偏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年雷逆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片污尉。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膀哲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出被碗,到底是詐尸還是另有隱情某宪,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布锐朴,位于F島的核電站兴喂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏焚志。R本人自食惡果不足惜衣迷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酱酬。 院中可真熱鬧壶谒,春花似錦、人聲如沸膳沽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挑社。三九已至陨界,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痛阻,已是汗流浹背菌瘪。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阱当,地道東北人麻车。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓缀皱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親动猬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子啤斗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 〇、前言 本文共108張圖赁咙,流量黨請(qǐng)慎重钮莲! 歷時(shí)1個(gè)半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識(shí)的框架詳細(xì)梳理了一遍彼水。 ...
    Raxxie閱讀 18,959評(píng)論 17 410
  • 本文翻譯自Functional Programming Howto 本文將介紹Python中函數(shù)式編程的特性崔拥。在對(duì)...
    大蟒傳奇閱讀 2,617評(píng)論 4 14
  • 日精進(jìn) 今日體驗(yàn) 好多東西離不開拆車件,新件原廠 不單獨(dú)提供拆車件卻可以提供凤覆×赐撸總結(jié)深入挖掘一下拆車件的行情,
    常曉東閱讀 44評(píng)論 0 0
  • 我們應(yīng)該清醒地認(rèn)識(shí)到盯桦,人生是一段發(fā)現(xiàn)自我的旅程慈俯,認(rèn)識(shí)到自己未來會(huì)成為一個(gè)什么樣的人。 中美教育的差異拥峦,一方面贴膘,中國(guó)...
    利索兒閱讀 171評(píng)論 0 0
  • 題記: 我希望你過得好,像照片一樣好略号。 單是聽聽書名就覺得暖暖的刑峡,我多希望,你可以一直都陪在我身邊玄柠。我多希望突梦,你...
    納蘭云際閱讀 275評(píng)論 0 0