Python 迭代器和生成器 反向迭代

2021-09-27 12:32:31 字數 1064 閱讀 1619

你想反方向迭代乙個序列

使用內建的reversed()函式,比如:

>>> a = [1, 2, 3, 4]

>>> for x in reversed(a):

... print(x)

...432

1

反向迭代僅僅當物件的大小可預先確定或者物件實現了__reversed__()的特殊方法時才能生效。 如果兩者都不符合,那你必須先將物件轉換為乙個列表才行,比如:

# print a file backwards

f = open('somefile')

for line in reversed(list(f)):

print(line, end='')

要注意的是如果可迭代物件元素很多的話,將其預先轉換為乙個列表要消耗大量的記憶體。

很多程式設計師並不知道可以通過在自定義類上實現__reversed__()方法來實現反向迭代。比如:

class countdown:

def __init__(self, start):

self.start = start

# forward iterator

def __iter__(self):

n = self.start

while n > 0:

yield n

n -= 1

# reverse iterator

def __reversed__(self):

n = 1

while n <= self.start:

yield n

n += 1

for rr in reversed(countdown(30)):

print(rr)

for rr in countdown(30):

print(rr)

定義乙個反向迭代器可以使得**非常的高效, 因為它不再需要將資料填充到乙個列表中然後再去反向迭代這個列表。

Python迭代器和生成器

先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...

Python迭代器和生成器

迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...

python 迭代器和生成器

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...