如何在python中向后循环?

时间:2010-08-13 12:25:09

标签: python iteration range

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

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

我可以想一些在python中这样做的方法(创建一个range(1,n+1)列表并使用while--i反转它,...)但是我想知道是否有这是一种更优雅的方式。有吗?

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

5 个答案:

答案 0 :(得分:229)

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的设计

答案 1 :(得分:99)

for x in reversed(whatever):
    do_something()

这基本上适用于具有已定义顺序的所有内容,包括xrange个对象和列表。

答案 2 :(得分:5)

如果输入是一个字符串,则所有这三个解决方案都会给出相同的结果:

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))

答案 3 :(得分:2)

def reverse(text):
    reversed = ''
    for i in range(len(text)-1, -1, -1):
        reversed += text[i]
    return reversed

print("reverse({}): {}".format("abcd", reverse("abcd")))

答案 4 :(得分:1)

要在不使用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