如何在Python中向后循环?

我正在谈论做类似的事情:

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

我可以想办法在python中创build(创buildrange(1,n+1)列表range(1,n+1)并使用while--i ,…),但我想知道是否有一个更优雅的方法来做它。 在那儿?

编辑:一些build议我使用xrange()而不是range(),因为范围返回列表,而xrange返回一个迭代器。 但是在Python 3中(我碰巧使用的是)range()返回一个迭代器,而xrange不存在。

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中没有单独的范围和xrange函数,前者被后者所取代。

 for x in reversed(whatever): do_something() 

这基本上对所有具有已定义顺序的东西都有效,包括xrange对象和列表。

如果input是一个string,所有这三个解决scheme都会得到相同的结果:

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)) 
 def reverse(text): reversed = '' for i in range(len(text)-1, -1, -1): reversed += text[i] return reversed print("reverse({}): {}".format("abcd", reverse("abcd"))) 

要反转string而不使用reversed[::-1] ,请尝试如下所示:

 def reverse(text): # Container for reversed string txet="" # store the length of the string to be reversed # account for indexes starting at 0 length = len(text)-1 # loop through the string in reverse and append each character # deprecate the length index while length>=0: txet += "%s"%text[length] length-=1 return txet