Python3內置函數——reversed() = 翻轉我的世界


認識reversed單詞

reversed [rɪ'vɜ:st] [rɪ'vɜst]

adj. 顛倒的;相反的;(判決等)撤銷的

v. 顛倒(reverse的過去式和過去分詞);翻轉

help(reversed)

Help on class reversed in module builtins:

class reversed(object)
 |  reversed(sequence) -> reverse iterator over values of the sequence
 |  
 |  Return a reverse iterator
 |  
 |  Methods defined here:
 |  
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __length_hint__(...)
 |      Private method returning an estimate of len(list(it)).
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  __next__(self, /)
 |      Implement next(self).
 |  
 |  __reduce__(...)
 |      Return state information for pickling.
 |  
 |  __setstate__(...)
 |      Set state information for unpickling.

reversed的英文解釋

Return a reverse iterator. seq must be an object which has a __reversed__() method or supports the sequence protocol (the __len__() method and the __getitem__() method with integer arguments starting at 0).

reversed()函數的輸入時任意一個序列,返回一份倒序后的序列副本。通常用於for循環需要倒序循環時。

eg:

seq = [1, 2, 3, 4, 5, 6, 7, 8]
for item in reversed(seq):
    print(item, end=" ")

結果:

8 7 6 5 4 3 2 1 

reversed()的功能:翻轉對象

  • 翻轉函數reversed()調用參數類中的__reversed__()函數。
  • 函數功能是反轉一個序列對象,將其元素從后向前顛倒構建成一個新的迭代器

reversed()的應用

應用1: 序列的倒序循環

seq1 = list(range(8))
print("seq1為: {}".format(seq1))
for i in reversed(seq1):
    print(i, end=' ')

結果:

seq1為: [0, 1, 2, 3, 4, 5, 6, 7]
7 6 5 4 3 2 1 0
seq2 = ['a', 'b', 'c', 'd']
print("seq2為: {}".format(seq2))
for i in reversed(seq2):
    print(i, end=' ')

結果:

seq2為: ['a', 'b', 'c', 'd']
d c b a

應用2:

如果一個對象不存在__reversed__()方法,那么,reversed()會調用__len__()和__getitem__()生成倒序序列。

class MySeq():
    def __len__(self):
        return 6
    def __getitem__(self, index):
        return 'y{0}'.format(index)
    
for item in reversed(MySeq()):
    print(item, end=', ')

結果:

y5, y4, y3, y2, y1, y0,

應用3:

如果我們需要定制或者優化倒序過程,我們只需重寫__reversed__()方法。

class MySeq():
    def __len__(self):
        return 6
    def __getitem__(self, index):
        return 'y{0}'.format(index)
class MyReversed(MySeq): def __reversed__(self): return 'hello, bright!' for item in reversed(MyReversed()): # 調用重寫的__reversed__()方法。 print(item, end=' ')

結果:

h e l l o ,   b r i g h t !

或者:

class MySeq():
    def __len__(self):
        return 6
    def __getitem__(self, index):
        return 'y{0}'.format(index)
class MyReversed(MySeq):
    def __reversed__(self):
        return reversed('hello, bright!')
    
for item in reversed(MyReversed()):
    print(item, end=' ')

結果:

! t h g i r b   , o l l e h 

應用4:

如果reversed()的參數不是一個序列對象,我們應該為該對象定義一個 __reversed__方法,這個時候就可以使用reversed()函數了。
class MyScore:
    def __init__(self, name, *args):
        self.name = name
        
        self.scores = []
        for value in args:
            self.scores.append(value)
            
    def __reversed__(self):
        self.scores = reversed(self.scores)

x = MyScore("bright", 66, 77, 88, 99, 100)

print('我的名字: {0}, \n我的成績: {1}'.format(x.name, x.scores))
print('我的成績按降序排列:{}'.format(list(reversed(x.scores))))

結果:

我的名字: bright, 
我的成績: [66, 77, 88, 99, 100]
我的成績按降序排列:[100, 99, 88, 77, 66]

知識在於點點滴滴的積累,我會在這個路上Go ahead,

有幸看到我博客的朋友們,若能學到知識,請多多關注以及討論,讓我們共同進步,揚帆起航。

后記:打油詩一首

適度鍛煉,量化指標

考量天氣,設定目標

科學鍛煉,成就體標

高效科研,實現學標


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM