如何在Python中反向循环?

298 投票
5 回答
677915 浏览
提问于 2025-04-16 02:44

我想做的事情是这样的:

for(i=n; i>=1; --i) {
   //do something with i
}

我能想到一些在Python中实现这个的办法,比如创建一个从1到n的列表(用range(1,n+1)),然后把它反转,或者用while循环和--i来实现等等。不过我在想有没有更优雅的方法呢?

补充说明: 有人建议我用xrange()代替range(),因为range()会返回一个列表,而xrange()返回的是一个迭代器。但在我使用的Python 3中,range()已经返回一个迭代器,而xrange()这个函数不存在了。

5 个回答

22

这三种解决方案如果输入的是字符串,结果都是一样的:

1.

def reverse(text):
    result = ""
    for i in range(len(text),0,-1):
        result += text[i-1]
    return (result)

2.

text[::-1]

3.

"".join(reversed(text))
261
for x in reversed(whatever):
    do_something()

这个方法基本上适用于所有有明确顺序的东西,包括 xrange 对象和列表。

457

range()xrange() 这两个函数可以接收一个第三个参数,这个参数用来指定步长。也就是说,你可以这样做。

range(10, 0, -1)

这样会得到

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 

不过在循环的时候,其实你应该用 xrange。所以,

xrange(10, 0, -1)

给使用 Python 3 的朋友们一个提示:在 Python 3 中,没有单独的 rangexrange 函数,只有一个 range,它的设计跟 Python 2 的 xrange 是一样的。

撰写回答