Python學習筆記 (5)迭代器與可迭代物件

2021-09-29 14:36:14 字數 3378 閱讀 6116

>>

> a =[1

,2,3

]>>

> b =

list

>>

> c =

>>

>

from collections import iterable

>>

>

isinstance

(a, iterable)

true

>>

>

isinstance

(b, iterable)

false

>>

>

isinstance

(c, iterable)

true

class

myrange

:"""建立乙個自己的range函式"""

def__init__

(self, minn, maxn=

none

, step=1)

:"""初始化myrange"""

self.minn, self.maxn =(0

, minn)

if maxn is

none

else

(minn, maxn)

self.step = step

diff = self.maxn - self.minn # 差

self.cnt = diff // step +(0

if diff % step ==

0else1)

# "//"的意思是向下取整除

# 整句話的意思是向上取整除,獲得輸出物件的個數

self.cur = self.minn

def__getitem__

(self, item)

:"""重寫方法"""

if item < self.cnt:

return self.minn +

(item + self.cnt)

% self.cnt * self.step

raise indexerror(

'索引{}超出了範圍{}'

.format

(item, self.maxn)

)

>>

>

for i in myrange(2,

10,3)

:...

print

(i, end=

' 'if i <

8else

'\n').

..25

8>>

>

range(10

)[-3

]7>>

> myrange(10)

[-3]

7

在這裡插入**片
class

myrange2

:"""建立乙個自己的range函式"""

def__init__

(self, minn, maxn=

none

, step=1)

:"""初始化myrange"""

self.minn, self.maxn =(0

, minn)

if maxn is

none

else

(minn, maxn)

self.step = step

diff = self.maxn - self.minn # 差

self.cnt = diff // step +(0

if diff % step ==

0else1)

# "//"的意思是向下取整除

# 整句話的意思是向上取整除,獲得輸出物件的個數

self.cur = self.minn

def__iter__

(self)

:"""建立迭代器"""

return self

def__next__

(self)

:"""返回下一元素"""

if self.cur < self.maxn:

self.cur += self.step

return self.cur - self.step

else

:raise stopiteration

for i in myrange2(2,

10,3)

:print

(i, end=

' 'if i <

8else

'\n')2

58print

(range(10

)[-3

])7print

(myrange2(10)

[-3]

)traceback (most recent call last)

: file ""

, line 1,in

typeerror:

'myrange2'

object

isnot subscriptable

>>

>a =[1

,2,3

]>>

> b =[4

,5,6

]>>

> c =[4

,5,6

,7,8

]>>

> zipped =

zip(a,b)

# 返回乙個物件

>>

> zipped

<

zipobject at 0x103abc288

>

>>

>

list

(zipped)

# list() 轉換為列表[(

1,4)

,(2,

5),(

3,6)

]>>

>

list

(zip

(a,c)

)# 元素個數與最短的列表一致[(

1,4)

,(2,

5),(

3,6)

]>>

> a1, a2 =

zip(

*zip

(a,b)

)# 與 zip 相反,zip(*) 可理解為解壓,返回二維矩陣式

>>

>

list

(a1)[1

,2,3

]>>

>

list

(a2)[4

,5,6

]>>

>

Python學習筆記 迭代器

from collections import iterable from collections import iterator 可迭代物件 可以直接作用於for迴圈的物件統稱為可迭代物件 iterable 可以用isinstance 去判斷乙個物件是否是iterable物件 可以直接作用於for...

Python學習筆記 迭代器和迭代器協議

術語概念解釋 關於 for 迴圈 寫乙個迭代器 1 迭代器協議 迭代器協議是一種約定,即物件必須提供乙個 next 方法,執行該方法要麼返回迭代中的下一項,要麼丟擲乙個 stopiteration 異常,終止迭代。2 迭代器 iterator 迭代器是一種物件,一種可以被 next 函式呼叫並不斷返...

python學習筆記10(迭代器)

可迭代物件 可以直接作用於for迴圈的物件統稱為可迭代物件 iterable 可以用isinstance 去判斷乙個物件是否是iterable物件 可以直接作用於for迴圈的資料型別一般分兩種 1 集合資料型別,如list tuple dict set string 2 是generator,包括生...