4.5 å��å�‘è¿ä»£Â¶
问题¶
ä½ æƒ³å��æ–¹å�‘è¿ä»£ä¸€ä¸ªåº�列
解决方案¶
使用内置的 reversed() 函数,比如:
>>> a = [1, 2, 3, 4]
>>> for x in reversed(a):
... print(x)
...
4
3
2
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)
定义一个å��å�‘è¿ä»£å™¨å�¯ä»¥ä½¿å¾—代ç �é�žå¸¸çš„高效, å› ä¸ºå®ƒä¸�å†�需è¦�将数æ�®å¡«å……到一个列表ä¸ç„¶å�Žå†�去å��å�‘è¿ä»£è¿™ä¸ªåˆ—表。