我说的是这样做:
for(i=n; i>=1; --i) {
//do something with i
}
我可以想到一些方法在python中这样做(创建一个范围(1,n+1)的列表,并反转它,使用while和——I,…),但我想知道是否有更优雅的方法来做到这一点。是吗?
编辑: 有些人建议我使用xrange()而不是range(),因为range返回一个列表,而xrange返回一个迭代器。但在Python 3(我碰巧使用)range()返回一个迭代器和xrange不存在。
我说的是这样做:
for(i=n; i>=1; --i) {
//do something with i
}
我可以想到一些方法在python中这样做(创建一个范围(1,n+1)的列表,并反转它,使用while和——I,…),但我想知道是否有更优雅的方法来做到这一点。是吗?
编辑: 有些人建议我使用xrange()而不是range(),因为range返回一个列表,而xrange返回一个迭代器。但在Python 3(我碰巧使用)range()返回一个迭代器和xrange不存在。
当前回答
for x in reversed(whatever):
do_something()
这基本上适用于所有具有定义顺序的东西,包括xrange对象和列表。
其他回答
for x in reversed(whatever):
do_something()
这基本上适用于所有具有定义顺序的东西,包括xrange对象和列表。
def reverse(text):
reversed = ''
for i in range(len(text)-1, -1, -1):
reversed += text[i]
return reversed
print("reverse({}): {}".format("abcd", reverse("abcd")))
要在不使用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
如果输入是字符串,这三个解决方案都会给出相同的结果:
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))
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中没有单独的range和xrange函数,只有range,这遵循了Python 2的xrange的设计。