黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Python之迭代器的幾個高級用法

Python之迭代器的幾個高級用法

來源:千鋒教育
發布人:xqq
時間: 2023-11-07 12:21:57 1699330917

首先是跳過開始部分,這個在我們讀取文本的時候最常用。在實際的應用當中,比如記錄的日志或者是代碼等等,一般來說頭部都會附上一段說明,或者用注釋標注或者是用特殊的符號標記。這些信息是給用到數據的程序員看的,當我們通過代碼獲取數據的時候,顯然是希望可以過濾掉這些信息的。

比如我們有一段數據,它的開頭用#做了一些注釋:

#Thisisadataforstudent

#Rows100

xiaoming,17,99;

xiaoli,18,98;

...

常規操作當中,我們會創建一個打開文件的迭代器,我們通過遍歷這個迭代器去獲取文件當中的數據:

withopen('xxxx.txt')asf:

forlineinf:

print(line)

如果只是用來輸出還好,如果我們需要加工文件當中的數據,那么頭部的注釋信息就會干擾我們代碼的運行。我們當然可以手動加入一些判斷,但是這會比較麻煩,代碼也不夠美觀。針對這個問題,一個比較好的解決方案是dropwhile。

dropwhile是itemtools當中的一個函數,它可以接收一個我們自定義的過濾函數和迭代器重新生成一個新的迭代器,這個新的迭代器當中會過濾掉之前迭代器頭部不符合我們要求的數據:

在剛才的例子當中我們想要過濾掉頭部加了#注釋的部分,我們可以這么操作:

fromitertoolsimportdropwhile

withopen('xxxx.txt')asf:

forlineindropwhile(lambdaline:line.startswith('#'),f):

print(line)

這樣出來的結果就沒有頭部我們不需要的內容了。

當我們知道頭部不符合情況的數據的格式的時候,可以使用dropwhile來規定過濾的格式。如果我們知道需要過濾的條數,則可以使用另外一個工具,叫做islice,它的本質是一個切片函數,就像是Python當中數組的切片功能一樣,可以切出迭代器當中指定片段的數據。

舉個例子:

fromitertoolsimportdropwhile

withopen('xxxx.txt')asf:

forlineinislice(f,3,None):

print(line)

這樣我們就會從第三行開始獲取,之前的數據會被過濾掉。它其實就代表著數組當中[3:]的切片操作。

迭代排列組合我們都知道在C++當中有一個叫做next_permutation的函數,可以傳入一個數組,返回下一個字典序的排列。在Python當中也有同樣的功能,但是是以迭代器的形式使用的。

舉個簡單的例子,比如我們有a,b,c三個元素,我們希望求出它的所有排列:

items=['a','b','c']

fromitertoolsimportpermutations

forpinpermutations(items):

print(p)

permutations還支持多傳一個參數,比如上述的排列當中我們希望只保留前兩個元素,除了切片之外,我們只需要多傳一個參數就好了,likethis:

forpinpermutations(items,2):

print(p)

除了排列之外,itertools當中還支持組合,用法還是一樣,只是把函數名稱換成是combinations而已:

fromitertoolsimportcombindations

forcincombinations(items):

print(c)

在一般的組合當中,一個元素一旦被選中那么它接下來就會從候選集當中移除,再也不會被選中。如果我們希望獲得有放回的組合,我們可以再換一個函數,這個函數名稱有點長,但是名字倒也直觀叫做combinations_with_replacement。但既然是有放回的抽樣,我們需要設定元素的數量,否則抽樣可以無限進行下去。

forcincombinations_with_replacement(items,3):

print(c)

迭代合并后的序列上一篇文章當中我們介紹了zip可以同時迭代多個迭代器,除此之外還有一種情況是我們需要把多個迭代器串起來迭代。比如系統的日志打在了多個文件當中,我們希望找出其中有error的日志來分析。這個時候,我們希望的不是同時讀取多個迭代器,而是希望能夠有辦法將多個迭代器的內容串聯起來。這個功能就是itertools當中的chain方法,它接受多個迭代器,當我們遍歷的時候,會自動將多個迭代器的內容串聯起來,我們可以無縫迭代。

舉個例子:

fromitertoolsimportchain

nums=[1,2,3]

chars=['a','b','c']

foriinchain(nums,chars):

print(i)

這樣我們會把nums和chars當中的內容一起輸出出來,就好像從頭到尾只執行了一個迭代器一樣。

你可能會說我們不用chain也可以實現啊,我們可以這樣:

foriinnums+chars:

print(i)

的確,從結果上來看這樣也是行得通的。但是如果我們分析一下內部執行的時候的中間變量,會發現當我們執行nums+chars的時候,實際上是先創建了一個新的臨時list。然后在這個list當中存儲nums和chars的數據,也就是說我們迭代的其實是這個新的list。這帶來的結果是我們額外開辟了一段內存,并且花費了一些時間。如果我們使用chain,它并不會有這樣的中間變量,完全是通過迭代器來執行的迭代,非常節省內存,這也是chain的優點。

歸并迭代的內容對于歸并操作我們應該都不陌生,在之前的歸并排序以及一些題解的文章當中我們見過很多次。同樣,我們在使用工具合并多個迭代器內容的時候,如果迭代器當中的內容有序,我們也可以對多個迭代器當中的元素進行歸并,而不再需要我們自己手動操作。

使用我們之前介紹的heapq的庫可以非常輕松地做到這一點,我們一起來看一個例子:

a=[1,3,5]

b=[2,4,6]

importheapq

forcinheapq.merge(a,b):

print(c)

執行之后,我們會得到[1,2,3,4,5,6]的結果。也就是說通過heapq.merge操作,我們把多個有序的迭代器合并到了一起。當然我們也可以自己合并,但如果我們只是需要利用當中的數據的話,使用merge操作可以節省內存空間。

以上內容為大家介紹了Python之迭代器的幾個高級用法,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。

tags: python培訓
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
欧美一级视频高清片| 久草免费在线观看| 国产视频一区在线| 久久国产精品只做精品| 黄色福利片| 国产a视频精品免费观看| 国产91精品露脸国语对白| 美女免费毛片| 天天做日日干| 国产高清视频免费| 精品国产一区二区三区精东影业| 精品国产一区二区三区久久久狼| 日本免费乱人伦在线观看| 国产一级生活片| 久久精品欧美一区二区| 久久国产精品自由自在| 麻豆系列 在线视频| 国产一级强片在线观看| 久久精品人人做人人爽97| 欧美大片a一级毛片视频| 一级女性大黄生活片免费| 国产一级生活片| 欧美激情一区二区三区在线 | 日韩在线观看视频黄| 色综合久久天天综合观看| 天天做日日爱夜夜爽| 国产a一级| 韩国三级一区| 国产伦久视频免费观看 视频| 一级毛片看真人在线视频| 精品久久久久久中文字幕一区| 欧美1区| 国产精品免费精品自在线观看| 国产网站免费观看| 你懂的日韩| 国产成人啪精品| 亚洲女人国产香蕉久久精品| 精品国产三级a∨在线观看| 国产一区二区福利久久| 久久久久久久久综合影视网| 日本在线不卡免费视频一区| 精品视频在线观看视频免费视频| 亚洲 欧美 91| 成人免费网站久久久| 日韩一级黄色| 99色视频| 国产不卡精品一区二区三区| 国产精品自拍在线观看| 亚欧成人毛片一区二区三区四区 | 深夜做爰性大片中文| 久久99这里只有精品国产| 欧美激情中文字幕一区二区| 日本在线不卡视频| 韩国毛片免费| 91麻豆精品国产自产在线观看一区| 欧美另类videosbestsex高清 | 精品国产三级a∨在线观看| 国产一区二区精品| 可以免费看毛片的网站| 精品视频一区二区三区免费| 精品视频一区二区三区免费| 欧美国产日韩精品| 国产福利免费视频| 午夜久久网| 欧美大片一区| 91麻豆精品国产片在线观看| 韩国毛片免费| 国产伦精品一区二区三区在线观看| 黄视频网站免费观看| 国产不卡精品一区二区三区| 国产91丝袜在线播放0| 日韩中文字幕一区| 精品视频一区二区三区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 91麻豆tv| 国产视频一区二区在线观看 | 久久精品免视看国产成人2021| 久草免费在线色站| 深夜做爰性大片中文| 91麻豆爱豆果冻天美星空| 免费国产一级特黄aa大片在线| 国产成人啪精品| 99色视频| 韩国妈妈的朋友在线播放| 欧美1区2区3区| 日韩在线观看网站| 黄色福利片| 午夜欧美成人久久久久久| 九九干| 99久久视频| 午夜在线影院| 91麻豆精品国产自产在线观看一区| 久久成人综合网| 久久国产一久久高清| 欧美a级片免费看| 国产极品白嫩美女在线观看看| 日韩在线观看视频网站| 久久99这里只有精品国产| 国产精品免费久久| 国产不卡精品一区二区三区| 四虎影视久久| 日本免费乱人伦在线观看| 精品视频在线观看免费| 99久久精品国产免费| 国产一级强片在线观看| 91麻豆精品国产自产在线观看一区| 国产原创中文字幕| 成人影视在线观看| 久久精品免视看国产明星| 黄色免费网站在线| 天天做日日爱| 日韩综合| 成人在免费观看视频国产| 国产网站在线| 精品国产一区二区三区久久久蜜臀| 成人a级高清视频在线观看| 九九干| 色综合久久手机在线| 高清一级做a爱过程不卡视频| 精品久久久久久免费影院| 国产成+人+综合+亚洲不卡| 免费一级片在线观看| 欧美一级视频免费观看| 日本特黄一级| 国产成人女人在线视频观看 | 国产不卡在线看| 黄色福利片| 欧美另类videosbestsex久久| 国产精品123| 色综合久久天天综合绕观看| 91麻豆高清国产在线播放| 九九热国产视频| 国产一级强片在线观看| 国产成人女人在线视频观看 | 日韩中文字幕在线亚洲一区 | 欧美爱色| 久久精品成人一区二区三区| 精品国产一区二区三区久久久蜜臀| 久久精品大片| 天天做日日爱夜夜爽| 成人高清护士在线播放| 亚洲精品久久玖玖玖玖| 欧美1区| 久久国产精品只做精品| 久久成人综合网| 黄色免费网站在线| 国产不卡高清在线观看视频| 可以免费看污视频的网站| 免费的黄色小视频| 二级特黄绝大片免费视频大片| 99久久网站| 国产一区二区精品久久| 国产不卡福利| 中文字幕97| 天天做日日爱| 99色播| 免费的黄色小视频| 九九久久99| 精品久久久久久中文字幕一区| 亚洲第一页乱| 国产91精品一区| 精品视频免费看| 国产一区二区精品久久91| 欧美大片毛片aaa免费看| 欧美激情一区二区三区视频| 免费的黄视频| 精品国产三级a| 久草免费在线视频| 久久国产精品自由自在| 黄色福利片| 国产韩国精品一区二区三区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日本在线播放一区| a级精品九九九大片免费看| 中文字幕97| 欧美激情一区二区三区视频 | 日韩男人天堂| 中文字幕一区二区三区精彩视频| 国产美女在线观看| 亚洲天堂免费| 九九免费精品视频| 欧美日本免费| 你懂的日韩| 可以免费在线看黄的网站| 国产成人女人在线视频观看| 久久国产精品自线拍免费| 国产成+人+综合+亚洲不卡| 久久精品人人做人人爽97| 免费一级生活片| 一本高清在线| 99久久精品国产国产毛片| 九九精品在线| 日韩专区第一页| 国产视频一区二区在线播放| 亚洲第一页乱| 91麻豆精品国产片在线观看| 日韩专区一区| 成人免费网站视频ww| 可以免费看污视频的网站| 国产高清视频免费|