溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中與迭代相關(guān)的函數(shù)有哪些

發(fā)布時(shí)間:2020-09-24 12:27:54 來(lái)源:億速云 閱讀:160 作者:Leah 欄目:編程語(yǔ)言

Python中與迭代相關(guān)的函數(shù)有哪些?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

下面要介紹的enumerate、range、zip、reversed、sorted屬于Python內(nèi)置的函數(shù)或者類別,返回的對(duì)象都可通過(guò)迭代方法訪問(wèn)。

一、enumerate函數(shù)

1.語(yǔ)法:enumerate(iterable, start=0)

1)該函數(shù)Python 2.3. 以上版本可用,2.6 添加 start 參數(shù),返回一個(gè)枚舉對(duì)象,該枚舉對(duì)象是一個(gè)迭代器,該函數(shù)將iterable對(duì)象中的元素轉(zhuǎn)換成枚舉值,并每個(gè)元素分配一個(gè)從start開(kāi)始的索引值;

2)參數(shù)iterable,表示一個(gè)可迭代對(duì)象如序列;

3)參數(shù)start表示索引值的起始值,默認(rèn)為0;

4)enumerate() 返回的枚舉對(duì)象通過(guò)next函數(shù)或 __next__ 方法返回一個(gè)元組,里面包含索引值(從 start 開(kāi)始,默認(rèn)為 0)和通過(guò)迭代 iterable 獲得的對(duì)應(yīng)元素值。

2.對(duì)于一個(gè)可迭代的(iterable)/可遍歷的對(duì)象,enumerate可以將其組成一個(gè)索引序列,利用它可以同時(shí)獲得索引和值,這種方式一般用在 for 循環(huán)當(dāng)中;

3.注意其返回值是一個(gè)迭代器,遍歷訪問(wèn)后元素就清空了

4.舉例:

1)s=enumerate('abc',100)?
l =list(s) ?#l的值為:[(100, 'a'), (101, 'b'), (102, 'c')]
2)for index, string in enumerate('ABC',10):print(index,':',string,', ',end='')

輸出:

10 : A , 11 : B , 12 : C ,

二、range函數(shù)

1.語(yǔ)法:

range(start, stop[, step])

1)返回值是一個(gè)不可變的數(shù)字序列可迭代對(duì)象,類型為range,該數(shù)字序列通常用于在 for 循環(huán)中循環(huán)指定的次數(shù);

2)參數(shù)start為可選參數(shù),表示數(shù)字序列的起始值,可以省略,默認(rèn)為0;

3)參數(shù)stop為必選參數(shù),表示整數(shù)序列的終止值,產(chǎn)生的序列的最大值必須小于該值,當(dāng)range只帶一個(gè)參數(shù)調(diào)用時(shí),該參數(shù)就是stop的值;

4)參數(shù)step表示序列兩個(gè)元素間的步長(zhǎng),也就是序列中相鄰兩個(gè)元素的差值,可選參數(shù),默認(rèn)為1;每個(gè)元素的值r[i]= ?start + step*i ,當(dāng)step為正整數(shù)時(shí)產(chǎn)生的序列是升序排序, r[i] < stop,當(dāng)step為負(fù)整數(shù)時(shí)產(chǎn)生的序列是降序排序, r[i] >stop。

2.說(shuō)明

1)如果第一個(gè)元素 不符合stop值對(duì)序列的限制條件,則該 range 對(duì)象為空;

2)range 對(duì)象支持索引訪問(wèn),也支持負(fù)索引,支持負(fù)索引時(shí)會(huì)將其解讀為從正索引所確定的序列的末尾開(kāi)始索引,這個(gè)與序列訪問(wèn)方法一樣;

3)range 對(duì)象支持切片訪問(wèn),但與索引訪問(wèn)方式不一樣,切片訪問(wèn)返回的還是一個(gè)range對(duì)象,假設(shè):切片的開(kāi)始位置索引為s,結(jié)束位置為e,當(dāng)step為正數(shù)時(shí)則返回的range對(duì)象為:

range(start+s*step,max(stop,start+e*step),step)

如果step為負(fù)數(shù),則返回的range對(duì)象為:

range(start+s*step,min(stop,start+e*step),step)

4)range 類型相比常規(guī) list 或 tuple 的優(yōu)勢(shì)在于一個(gè) range 對(duì)象總是占用固定數(shù)量的(較小)內(nèi)存,不論其所表示的范圍有多大(因?yàn)樗槐4媪?start, stop 和 step 值,并會(huì)根據(jù)需要計(jì)算具體單項(xiàng)或子范圍的值),某種程度上與生成器表達(dá)式類似,但它不屬于生成器,也不是迭代器。

5)使用 == 和 != 檢測(cè) range 對(duì)象是否相等是將其作為序列來(lái)比較。 也就是說(shuō),如果兩個(gè) range 對(duì)象表示相同的值序列就認(rèn)為它們是相等的。 (請(qǐng)注意比較結(jié)果相等的兩個(gè) range 對(duì)象可能會(huì)具有不同的 start, stop 和 step 屬性,例如 range(0) == range(2, 1, 3) 而 range(0, 3, 2) == range(0, 4, 2)。)

6)注意:在Python3以前有個(gè)xrange函數(shù),Python3以后取消了,其功能合并到了range

三、zip函數(shù)

1.語(yǔ)法:zip(*iterables)

1)參數(shù)說(shuō)明:iterables表示多個(gè)可迭代對(duì)象,可以沒(méi)有;

2)返回值為一個(gè)zip對(duì)象,這個(gè)對(duì)象也是一個(gè)迭代器,該迭代器中的元素是元組,元組的元素i按參數(shù)順序來(lái)自于這多個(gè)可迭代對(duì)象的第i個(gè)元素。當(dāng)所輸入可迭代參數(shù)對(duì)象中最短的一個(gè)被耗盡時(shí),迭代器將停止迭代。 當(dāng)只有一個(gè)可迭代對(duì)象參數(shù)時(shí),它將返回一個(gè)單元組的迭代器。 不帶參數(shù)時(shí),它將返回一個(gè)空迭代器。

2.說(shuō)明:

1)返回對(duì)象可以轉(zhuǎn)換為列表、字典等類型,但轉(zhuǎn)換為字典類型時(shí),zip必須且只能有2個(gè)迭代對(duì)象作為參數(shù);

2)zip對(duì)象是個(gè)迭代器,因此遍歷一次后元素會(huì)清空;

3)要查看其內(nèi)容,可使用list或dict將其轉(zhuǎn)換為列表

3.舉例:按順序執(zhí)行下列腳本

numbers=[1,2,3,4,5,6]
ABC=['A','B','C']
abc='abc'
z=zip(numbers,ABC,abc)

list(z) #輸出為:

[(1, 'A', 'a'), (2, 'B', 'b'), (3, 'C', 'c')]

z=zip(numbers,ABC,abc) #思考一下,為什么要再次zip?

dict(z) #執(zhí)行報(bào)錯(cuò),因?yàn)槭褂昧?個(gè)迭代對(duì)象不能創(chuàng)建字典數(shù)據(jù)

list(z) #輸出為:

[(2, 'B', 'b'), (3, 'C', 'c')]

思考一下為什么比上面少了一個(gè)?

z=zip(numbers,ABC,abc)?

for n,A,a in z:print(n,A,a,end='; ') #輸出為:

1 A a; 2 B b; 3 C c;

四、reversed函數(shù)

1.語(yǔ)法:reversed(seq)

2.說(shuō)明:

1)返回一個(gè)與參數(shù)對(duì)象順序倒轉(zhuǎn)的 iterator對(duì)象,原參數(shù)對(duì)象保持不變,返回對(duì)象類型為reversed,是一個(gè)可迭代對(duì)象,不能直接訪問(wèn),可以轉(zhuǎn)換為其他對(duì)象或通過(guò)for循環(huán)方法訪問(wèn)

2)seq 為任何序列或可迭代的對(duì)象,必須是一個(gè)具有 __reversed__() 方法的對(duì)象或者是支持序列協(xié)議的對(duì)象(支持__len__() 方法和 從0開(kāi)始的整數(shù)類型參數(shù)的__getitem__() 方法)

3.舉例:

s="AbcD"
s2=reversed(s)

type(s2)#輸出:

<class 'reversed'>

list(s2) #輸出:

['D', 'c', 'b', 'A']

s保持不變

s2 #輸出:

<reversed object at 0x000000000371B1D0>

五、sorted函數(shù)

1.語(yǔ)法:

sorted(iterable, *, key=None, reverse=False)

2.說(shuō)明:

1)根據(jù) iterable 中的項(xiàng)返回一個(gè)新的已排序列表,返回值為已排序的列表,原參數(shù)iterable 中的數(shù)據(jù)不會(huì)發(fā)生變化;

2)key 指定帶有單個(gè)參數(shù)的函數(shù),用于從 iterable 的每個(gè)元素中提取用于比較的鍵 (例如 key=str.lower)。 默認(rèn)值為 None (直接比較元素)

3)reverse 為一個(gè)布爾值。 如果設(shè)為 True,則每個(gè)列表元素將按反向順序比較進(jìn)行排序

3.舉例

s="AbcD"

s1=sorted(s) #s1的數(shù)據(jù)為:

['A', 'D', 'b', 'c']

s2=sorted(s,key=str.lower) #s2的數(shù)據(jù)為:

['A', 'b', 'c', 'D']

關(guān)于Python中與迭代相關(guān)的函數(shù)有哪些問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI