官术网_书友最值得收藏!

Using reversed() to change the order

There are times when we need a sequence reversed. Python offers us two approaches to this: the reversed() function, and slices with reversed indices.

For example, consider performing a base conversion to hexadecimal or binary. The following code is a simple conversion function:

def digits(x: int, b: int) -> Iterator[int]:
if x == 0: return yield x % b for d in digits(x//b, b): yield d

This function uses a recursion to yield the digits from the least significant to the most significant. The value of x%b will be the least significant digits of x in the base b.

We can formalize it as follows:

In many cases, we'd prefer the digits to be yielded in the reverse order. We can wrap this function with the reversed() function to swap the order of the digits:

def to_base(x: int, b: int) -> Iterator[int]:
return reversed(tuple(digits(x, b)))
The reversed() function produces an iterable, but the argument value must be a sequence object. The function then yields the items from that object in the reverse order.

We can do a similar kind of thing with a slice, such as tuple(digits(x, b))[::-1]. The slice, however, is not an iterator. A slice is a materialized object built from another materialized object. In this case, for such small collections of values, the distinction is minor. As the reversed() function uses less memory, it can be advantageous for larger collections.

主站蜘蛛池模板: 阳曲县| 宁波市| 张北县| 株洲县| 沈阳市| 本溪市| 墨江| 新竹县| 正阳县| 育儿| 平陆县| 德兴市| 雷州市| 溧阳市| 宁河县| 永城市| 娱乐| 大冶市| 开远市| 丹凤县| 哈密市| 杂多县| 双柏县| 南华县| 垫江县| 栾川县| 清丰县| 无极县| 体育| 广汉市| 汤阴县| 商洛市| 沅陵县| 岑巩县| 建平县| 盐边县| 陵川县| 上饶市| 陆良县| 乌鲁木齐县| 车致|