中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中如何使用Itertools庫

發布時間:2021-07-05 17:55:23 來源:億速云 閱讀:206 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關Python中如何使用Itertools庫,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。


一、概念簡介

1. 什么是迭代器?

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

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

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

2. 什么是可迭代的?

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

3. 什么是Itertools?

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

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

二、無限迭代器

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

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

本節中列出的三個函數構造并返回可以是無限項流的迭代器。

1. Count

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

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

結果:

10 11 12 13 14 15

2. Cycle

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

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

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

結果:

P ythonPythonP

3. Repeat

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

to_repeat = 'FM' how_many_times = 4 my_repeater = it.repeat(to_repeat, how_many_times)for i in my_repeater:    print(i)#Prints FM FM FM FM

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

Python中如何使用Itertools庫

三、終止迭代器

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

  • 我們可能有很多迭代,我們想在一個序列中一個一個地對所有迭代的元素執行一個操作。

  • 或者當我們有很多函數想要對iterable的每個元素執行時

  • 或者有時我們就從迭代器中刪除元素,然后對其他元素執行操作。

1. Chain

這個方法允許我們創建一個迭代器,它返回序列中所有輸入迭代中的元素,直到沒有元素剩下為止。因此,它可以將連續序列視為單個序列。

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

結果:

1 23abcEnd

2. Drop While

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

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

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

結果:

job10 job4job5

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

3. Take While

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

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

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

結果:

job1 job2job3

4. GroupBy

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

考慮以下代碼片段:

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

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

因此,這將打印:

Key: F Group: [‘F’, ‘F’, ‘F’] Key: A Group: [‘A’, ‘A’] Key: R Group: [‘R’, ‘R’] Key: H Group: [‘H’, ‘H’, ‘H’] Key: A Group: [‘A’, ‘A’] Key: D Group: [‘D’, ‘D’] Key: M Group: [‘M’, ‘M’] Key: A Group: [‘A’, ‘A’, ‘A’] Key: L Group: [‘L’, ‘L’] Key: I Group: [‘I’, ‘I’] Key: K Group: [‘K’, ‘K’, ‘K’]

5. Tee

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

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

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

[‘F’, ‘M’] [‘F’, ‘M’][‘F’, ‘M’][‘F’, ‘M’][‘F’, ‘M’]

四、組合迭代器

1. Permutations

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

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

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

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

結果:

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

如果長度為2,則生成:

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

2. Combinations

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

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

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

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

結果:

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

關于Python中如何使用Itertools庫就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

夏邑县| 辽宁省| 武鸣县| 上杭县| 景德镇市| 大竹县| 漯河市| 临海市| 阿克陶县| 诏安县| 和田市| 孝感市| 赞皇县| 绍兴县| 武安市| 镇康县| 六枝特区| 厦门市| 广宁县| 汶川县| 牡丹江市| 临汾市| 兰坪| 庆元县| 蒙城县| 闽清县| 南汇区| 侯马市| 涞源县| 墨竹工卡县| 神木县| 巩义市| 凤台县| 潼关县| 黄山市| 西安市| 宁武县| 礼泉县| 忻州市| 民权县| 呼图壁县|