Python 使用reversed()函数改变顺序,有时需要反转序列。Python提供了两种实现方式:使用reversed()
函数或者使用反序下标值。
例如,假设需要把一个数字转换为16进制数或者2进制数,下面是一个简单的转换函数:
def digits(x: int, b: int) -> Iterator[int]:
if x == 0: return
yield x % b
for d in digits(x // b, b):
yield d
该函数使用递归从最低有效位向最高有效位依次返回计算结果,x % b
的值是以b
为基底的x
值的最低有效位。
上述算法可表示如下:
多数情况下,我们希望返回的数值以反序输出。把上面函数的结果包裹在reversed()
函数中,就可以改变输出各位数字的顺序了。
def to_base(x: int, b: int) -> Iterator[int]:
return reversed(tuple(digits(x, b)))
reversed()
函数返回的是可迭代对象,但它的参数必须是序列。函数将源序列中的元素以反序依次返回。
也可以用类似于tuple(digits(x, b))[::-1]
的方式实现相同的反序效果,但切片不是可迭代对象,而是从实例化对象上变换而来的实例化对象。这里用到的集合较小,所以两种实现方法的区别不大。对于大的数据集合,使用reversed()
函数的实现方法消耗内存更少。