如何在Python中实现rangeiterator? 反向(X范围(100)) >>>它=反向(xrange(100))。\uuuu iter\uuuuuuuu() >>>它 >>>下一个(it) 99
如何在Python中实现类似的东西?更具体地说,我如何制作一个迭代器,它可以被反转,而不必在反转之前在内存中列出它?基本上,您可以在集合上实现如何在Python中实现rangeiterator? 反向(X范围(100)) >>>它=反向(xrange(100))。\uuuu iter\uuuuuuuu() >>>它 >>>下一个(it) 99,python,iterator,Python,Iterator,如何在Python中实现类似的东西?更具体地说,我如何制作一个迭代器,它可以被反转,而不必在反转之前在内存中列出它?基本上,您可以在集合上实现 xrange的逻辑如下: >>> reversed(xrange(100)) <rangeiterator object at 0xb72aab78> >>> it = reversed(xrange(100)).__iter__() >>> it <rangeiterator ob
xrange
的逻辑如下:
>>> reversed(xrange(100))
<rangeiterator object at 0xb72aab78>
>>> it = reversed(xrange(100)).__iter__()
>>> it
<rangeiterator object at 0xb72aa4d0>
>>> next(it)
99
这里没有技巧——您需要知道如何生成反向迭代器。Python并不是为您而做的。基本上,您是在集合上实现的
xrange
的逻辑如下:
>>> reversed(xrange(100))
<rangeiterator object at 0xb72aab78>
>>> it = reversed(xrange(100)).__iter__()
>>> it
<rangeiterator object at 0xb72aa4d0>
>>> next(it)
99
这里没有技巧——您需要知道如何生成反向迭代器。Python不会为您这样做。如果您的迭代器实现了方法
\uuuu reversed\uuuu()
,则内置的reversed()
将使用该方法xrange()
返回执行此操作的迭代器。如果迭代器实现了方法\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuxrange()
返回执行此操作的迭代器。反向
将处理两种类型的对象:
- 序列(如
列表
)
- 具有
\uuuuu反向\uuuuu
魔术方法的迭代器
如果您有一个自定义序列,并且您可以使用该序列的len()
,那么您就可以开始了——否则,您需要添加\uu len\uu
魔术方法;如果不能(例如,因为长度未知),则不能延迟反转
如果您有一个自定义迭代器,那么请确保它具有\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
神奇方法:\uuuuuuuu;同样,如果您不能提供一个(例如,因为长度未知),那么您不能懒洋洋地反转它
注意:有关创建自定义iterables的更多信息,请参阅。reversed
将使用两种类型的对象:
- 序列(如
列表
)
- 具有
\uuuuu反向\uuuuu
魔术方法的迭代器
如果您有一个自定义序列,并且您可以使用该序列的len()
,那么您就可以开始了——否则,您需要添加\uu len\uu
魔术方法;如果不能(例如,因为长度未知),则不能延迟反转
如果您有一个自定义迭代器,那么请确保它具有\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
神奇方法:\uuuuuuuu;同样,如果您不能提供一个(例如,因为长度未知),那么您不能懒洋洋地反转它
注意:有关创建自定义iterables的更多信息,请参阅。您询问如何使用reversed()创建一个可逆的迭代器而不会变得太贵,我说得对吗?您询问如何使用reversed()创建一个可逆的迭代器而不会变得太贵,我说得对吗?