Python仅枚举反向索引 [英] Python enumerate reverse index only

查看:80
本文介绍了Python仅枚举反向索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试反转 enumerate 给出的索引,同时保留被枚举列表的原始顺序.

假设我有以下内容:

<代码>>>范围(5)[0, 1, 2, 3, 4]

如果我列举这个,我会得到以下内容:

<代码>>>列表(枚举(范围(5)))[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

但是我想反转 enumerate 提供的索引,以便我得到:

[(4, 0), (3, 1), (2, 2), (1, 3), (0, 4)]

到目前为止,我有以下代码:

reversed(list(enumerate(reversed(range(5)))))

我只是想知道是否有更简洁的方法来做到这一点?

解决方案

如何使用 zip 代替反向范围?

<预><代码>>>>zip(范围(9,-1,-1),范围(10))[(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1, 8), (0, 9)]>>>def reversedEnumerate(l):返回 zip(range(len(l)-1, -1, -1), l)>>>反向枚举(范围(10))[(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1, 8), (0, 9)]

正如@julienSpronk 所建议的,使用 izip 来获取生成器,还有 xrange:

import itertools>>>导入迭代工具>>>def reversedEnumerate(l):...返回 itertools.izip(xrange(len(l)-1, -1, -1), l)...>>>反向枚举(范围(10))<itertools.izip 对象在 0x03749760>>>>对于在 reversedEnumerate(range(10)) 中的 i:...打印我...(9, 0)(8, 1)(7, 2)(6, 3)(5, 4)(4, 5)(3, 6)(2, 7)(1, 8)(0, 9)

I am trying to reverse the index given by enumerate whilst retaining the original order of the list being enumerated.

Assume I have the following:

>> range(5)
[0, 1, 2, 3, 4]

If I enumerate this I would get the following:

>> list(enumerate(range(5)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

However I want to reverse the index provided by enumerate so that I get:

[(4, 0), (3, 1), (2, 2), (1, 3), (0, 4)]

So far I have the following code:

reversed(list(enumerate(reversed(range(5)))))

I was just wondering if there was a neater way to do this?

解决方案

How about using zip instead with a reversed range?

>>> zip(range(9, -1, -1), range(10))
[(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1, 8), (0, 9)]


>>> def reversedEnumerate(l):
        return zip(range(len(l)-1, -1, -1), l)
>>> reversedEnumerate(range(10))
[(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1, 8), (0, 9)]

As @julienSpronk suggests, use izip to get a generator, also xrange:

import itertools
>>> import itertools
>>> def reversedEnumerate(l):
...     return itertools.izip(xrange(len(l)-1, -1, -1), l)
...     
>>> reversedEnumerate(range(10))
<itertools.izip object at 0x03749760>
>>> for i in reversedEnumerate(range(10)):
...     print i
...     
(9, 0)
(8, 1)
(7, 2)
(6, 3)
(5, 4)
(4, 5)
(3, 6)
(2, 7)
(1, 8)
(0, 9)

这篇关于Python仅枚举反向索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆