問題
你想反方向迭代乙個序列
解決方案
使用內建的 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:
dwww.cppcns.comef __init__(self, sta程式設計客棧rt):
self.start = start
# forward iterator
def __iter_
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)
定義乙個反向迭代器可以使得**非常的高效,因為它不再需要將資料填充到乙個列表中然後再去反向迭代這個列表。
如何反序迭代乙個序列
在列表中,如果我們要將列表反向迭代通常使用 reverse 但這個方法有個缺陷就是會改變列表。因此,我們推薦使用 reversed 它會返回乙個迭代器。這裡,我們可以實現 reversed 解決反向迭代問題 以列表為例 lst a c 1 a c 3 去重 print list set lst 反序...
python迭代和如何判斷乙個物件是可迭代物件
可以理解為,任意的集合使用for迴圈遍歷 python中,迭代永遠是取出元素本身,而非元素的索引。對於有序集合,有時候會需要取出元素的索引,可以使用python內建的enumerate函式。enumerate函式可以把乙個list變成索引 元素對,這樣就可以在for迴圈中同時迭代索引和元素本身。li...
python如何檢查乙個物件是否是可迭代物件
有的時候我們會記不住python裡哪種資料型別是可以迭代的物件,這個時候我們可以使用collections裡的iterable來檢查這個例項是否可以迭代。from collections import iterable 載入模組 isinstance abc iterable 字串是可迭代物件嗎?t...