如何在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