成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python語言的精華:Itertools庫

開發(fā) 后端
我們可以使用Itertools模塊來豐富我們的應用程序,并在更短的時間內(nèi)創(chuàng)建一個可靠的工作解決方案。本文將幫助讀者理解如何在項目中使用Itertools模塊。

你知道Python的Itertools庫被認為是Python的瑰寶嗎?一些用戶甚至認為它是最酷和最令人驚嘆的Python庫之一。我們可以使用Itertools模塊來豐富我們的應用程序,并在更短的時間內(nèi)創(chuàng)建一個可靠的工作解決方案。

本文將幫助讀者理解如何在項目中使用Itertools模塊。

文章分為三個部分,每個部分將解釋Itertools庫的特定功能。具體來說:

  • 無限的迭代器
  • 終止迭代器
  • 組合迭代器
[[342648]]

一、概念簡介

1. ​什么是迭代器?

迭代器是由__next__方法組成的對象。它有一個狀態(tài)。狀態(tài)用于記住迭代期間的執(zhí)行。因此,迭代器知道它的當前狀態(tài),這使它的內(nèi)存效率高。這就是為什么在內(nèi)存高效和快速的應用程序中使用迭代器的原因。

我們可以打開無限的數(shù)據(jù)流(比如讀取文件)并獲取下一項(比如文件中的下一行)。然后我們可以對項目執(zhí)行一個操作,并繼續(xù)進行下一個項目。這可能意味著我們可以有一個返回無限個元素的迭代器,因為我們只需要知道當前項。

當沒有下一個要返回的項時,迭代器會引發(fā)StopIteration異常。

2. 什么是可迭代的?

iterable是可以返回迭代器的對象。它有一個__iter__方法返回一個迭代器。iterable也是一個我們可以循環(huán)并可以調(diào)用iter()的對象。它有一個__getitem__方法,它可以從0開始去連續(xù)索引(并在索引不再有效時引發(fā)一個IndexError)。

3. 什么是Itertools?

Itertools是Python模塊,是Python 3標準庫的一部分。它允許我們在迭代器上執(zhí)行高效的內(nèi)存和計算任務。它的靈感來自APL、Haskell和SML的構(gòu)造。

從本質(zhì)上講,該模塊包含許多快速且內(nèi)存效率高的方法,這些方法可以幫助我們用純Python簡潔而高效地構(gòu)建應用程序。

二、無限迭代器

如果我們想構(gòu)造一個返回無限均勻間隔值的迭代器呢?或者,如果我們必須從迭代器生成一個元素循環(huán)呢?或者,也許我們想要重復迭代器的元素?

itertools庫提供了一組函數(shù),我們可以使用這些函數(shù)來執(zhí)行所需的所有功能。

本節(jié)中列出的三個函數(shù)構(gòu)造并返回可以是無限項流的迭代器。

1. Count

作為實例,我們可以生成一個等距值的無限序列:

  1. start = 10 
  2. stop = 1 
  3. my_counter = it.count(start, stop) 
  4. for i in my_counter: 
  5.     # this loop will run for ever 
  6.     print(i) 

結(jié)果:

  1. 10 
  2. 11 
  3. 12 
  4. 13 
  5. 14 
  6. 15 

2. Cycle

我們可以使用cycle方法從輸入中生成無限循環(huán)的元素。

該方法的輸入需要是可迭代的對象,比如列表、字符串或字典等:

  1. my_cycle = it.cycle('Python') 
  2. for i in my_cycle:    print(i) 

結(jié)果:

  1. ythonPythonP 

3. Repeat

要重復一個項(例如字符串或集合),可以使用repeat()函數(shù):

  1. to_repeat = 'FM' 
  2. how_many_times = 4 
  3. my_repeater = it.repeat(to_repeat, how_many_times)for i in my_repeater:    print(i)#Prints 
  4. FM 
  5. FM 
  6. FM 
  7. FM 

這將重復字符串“FM”4次。如果我們不提供第二個參數(shù),那么它將無限次重復這個字符串。

[[342649]]

三、終止迭代器

在本節(jié)中,我將說明終止迭代的強大特性。這些函數(shù)可以用于許多場景,例如:

  • 我們可能有很多迭代,我們想在一個序列中一個一個地對所有迭代的元素執(zhí)行一個操作。
  • 或者當我們有很多函數(shù)想要對iterable的每個元素執(zhí)行時
  • 或者有時我們就從迭代器中刪除元素,然后對其他元素執(zhí)行操作。

1. Chain

這個方法允許我們創(chuàng)建一個迭代器,它返回序列中所有輸入迭代中的元素,直到?jīng)]有元素剩下為止。因此,它可以將連續(xù)序列視為單個序列。

  1. chain = it.chain([1,2,3], ['a','b','c'], ['End']) 
  2. for i in chain:    print(i) 

結(jié)果:

  1. 23abcEnd 

2. Drop While

我們可以傳遞一個iterable和一個條件,這個方法將開始對每個元素計算條件,直到條件對一個元素返回False為止。一旦某個元素的條件值為False,該函數(shù)將返回可迭代的其余元素。

例如,假設(shè)我們有一個作業(yè)列表,并且我們希望遍歷元素,并且只有在不滿足條件時才返回元素。一旦條件的值為False,我們期望返回迭代器的其余元素。

  1. jobs = ['job1', 'job2', 'job3', 'job10', 'job4', 'job5'] 
  2. dropwhile = it.dropwhile(lambda x : len(x)==4, jobs) 
  3. for i in dropwhile: 
  4.     print(i) 

結(jié)果:

  1. job10 
  2. job4job5 

該方法返回了上面的三項,因為元素job10的長度不等于4個字符,因此返回了job10和其他元素。

3. Take While

這個方法與dropwhile()方法相反。本質(zhì)上,它返回一個iterable的所有元素,直到第一個條件返回False,然后它不返回任何其他元素。

例如,假設(shè)我們有一個作業(yè)列表,并且希望在不滿足條件時立即停止返回作業(yè)。

  1. jobs = ['job1', 'job2', 'job3', 'job10', 'job4', 'job5'] 
  2. takewhile = it.takewhile(lambda x : len(x)==4, jobs) 
  3. for i in takewhile: 
  4.     print(i) 

結(jié)果:

  1. job1 
  2. job2job3 

4. GroupBy

這個函數(shù)在將可迭代的連續(xù)元素分組之后構(gòu)造一個迭代器。該函數(shù)返回一個鍵、值對的迭代器,其中鍵是組鍵,值是按鍵分組的連續(xù)元素的集合。

考慮以下代碼片段:

  1. iterable = 'FFFAARRHHHAADDMMAAALLIIKKK' 
  2. my_groupby = it.groupby(iterable)for key, group in my_groupby: 
  3.     print('Key:', key) 
  4.     print('Group:', list(group)) 

注意,group屬性是可迭代的,因此我將其具體化為一個列表。

因此,這將打印:

  1. Key: F 
  2. Group: [‘F’, ‘F’, ‘F’] 
  3. Key: A 
  4. Group: [‘A’, ‘A’] 
  5. Key: R 
  6. Group: [‘R’, ‘R’] 
  7. Key: H 
  8. Group: [‘H’, ‘H’, ‘H’] 
  9. Key: A 
  10. Group: [‘A’, ‘A’] 
  11. Key: D 
  12. Group: [‘D’, ‘D’] 
  13. Key: M 
  14. Group: [‘M’, ‘M’] 
  15. Key: A 
  16. Group: [‘A’, ‘A’, ‘A’] 
  17. Key: L 
  18. Group: [‘L’, ‘L’] 
  19. Key: I 
  20. Group: [‘I’, ‘I’] 
  21. Key: K 
  22. Group: [‘K’, ‘K’, ‘K’] 

5. Tee

該方法可以拆分一個迭代,并從輸入中生成新的迭代。輸出也是一個迭代器,它返回給定數(shù)量的項的可迭代值。為了更好地理解它,請看下面的代碼片段:

  1. iterable = 'FM' 
  2. tee = it.tee(iterable, 5) 
  3. for i in tee:    print(list(i)) 

這個方法返回整個可迭代FM, 5次:

  1. [‘F’, ‘M’] 
  2. [‘F’, ‘M’][‘F’, ‘M’][‘F’, ‘M’][‘F’, ‘M’] 

四、組合迭代器

1. Permutations

通過使用permutation方法,我們可以創(chuàng)建一個迭代器來返回輸入iterable中元素的連續(xù)排列。

我們可以傳入一個參數(shù)來指定排列的長度。它默認為可迭代的長度。

這意味著當缺少長度時,該方法將生成所有可能的全長排列。

  1. iterable = 'FM1' 
  2. length = 2 
  3. permutations = it.permutations(iterable, length) 
  4. for i in permutations: 
  5.     print(i) 

結(jié)果:

  1. (‘F’, ‘M’, ‘1’) 
  2. (‘F’, ‘1’, ‘M’)(‘M’, ‘F’, ‘1’)(‘M’, ‘1’, ‘F’)(‘1’, ‘F’, ‘M’)(‘1’, ‘M’, ‘F’) 

如果長度為2,則生成:

  1. (‘F’, ‘M’) 
  2. (‘F’, ‘1’)(‘M’, ‘F’)(‘M’, ‘1’)(‘1’, ‘F’)(‘1’, ‘M’)(‘F’, ‘M’)(‘F’, ‘1’)(‘M’, ‘1’) 

2. Combinations

最后,我想解釋一下如何生成iterable的組合。

給定一個可迭代器,我們可以構(gòu)造一個迭代器來返回給定長度的元素的子序列。

根據(jù)它們的位置,元素被視為唯一的,并且只返回不同的元素。

  1. iterable = 'FM1' 
  2. combinations = it.combinations(iterable, 2) 
  3. for i in combinations:    print(i) 

結(jié)果:

  1. (‘F’, ‘M’) 
  2. (‘F’, ‘1’)(‘M’, ‘1’) 

英文原文:

https://medium.com/fintechexplained/advanced-python-itertools-library-the-gem-of-python-language-99da37dfcca2

 

責任編輯:趙寧寧 來源: Python學會
相關(guān)推薦

2021-09-28 14:40:03

Python內(nèi)置庫itertools

2020-11-06 13:42:59

itertools

2023-11-28 11:22:51

Pythonitertools庫工具

2025-01-08 17:20:00

pytho數(shù)據(jù)分組itertools

2023-05-24 10:24:56

代碼Python

2017-06-27 09:43:43

Python機器學習

2024-03-25 08:57:49

模塊迭代對象迭代器

2024-12-30 07:40:58

Python編程循環(huán)結(jié)構(gòu)

2010-12-14 09:42:19

2010-03-12 13:10:02

Python編程語言

2023-11-16 18:17:13

Python編程內(nèi)置模塊

2009-11-24 14:55:00

OSPF

2014-06-10 14:19:52

iOSUIApplicati總結(jié)

2009-07-09 17:47:40

使用JDBC

2019-05-09 09:35:17

Spring Boot技術(shù)開發(fā)

2021-11-11 15:12:21

C語言線程代碼

2020-10-27 07:56:35

Python

2023-09-27 12:11:08

Python水印Pillow

2017-03-02 08:28:09

科技新聞早報

2018-06-06 09:10:34

編程語言Python庫
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲综合无码一区二区 | 日日摸夜夜添夜夜添精品视频 | 91一区二区 | 午夜影院在线播放 | 国产一区精品在线 | 国产97在线看| 狠狠色香婷婷久久亚洲精品 | 97精品国产97久久久久久免费 | 天天躁日日躁狠狠的躁天龙影院 | 在线2区| 久久久精| 一二三四在线视频观看社区 | 国产 欧美 日韩 一区 | 成人在线一区二区三区 | 一区二区在线 | 免费在线看黄 | av男人的天堂在线 | 国产欧美精品一区二区三区 | 精品久久久久久久久久 | 久久久久久高潮国产精品视 | 亚洲免费在线观看 | 一区二区三区高清 | 国产在线视频在线观看 | 蜜桃黄网| 久久久久久免费看 | 日韩国产中文字幕 | 国产精品网址 | 久久久久久久久久久福利观看 | 亚洲欧美激情精品一区二区 | 成人黄色网址大全 | 99精品免费久久久久久久久日本 | 日韩亚洲一区二区 | 日日摸日日添日日躁av | 热99在线 | 免费a在线 | 黄a免费看| 国产午夜精品视频 | 国产xxxx在线| 久久久久久免费毛片精品 | 成人福利视频 | 精品久久久久久亚洲综合网 |