我说的是要像这样做:
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不存在。
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
设计。
range
,只是因为提问者也这样做了。xrange
和 range
仅在处理 非常 大的范围时才有所区别,例如数百兆字节。此外,在 Python 3.x 中,这种区别已经不存在了。 - Chinmay Kanchifor x in reversed(whatever):
do_something()
这适用于基本上所有具有定义顺序的东西,包括 xrange
对象和列表。
reversed(range(3))
会产生2, 1, 0,正好是range(3)
的反转,而你否则需要做类似于range(3-1, 0-1, -1)
才能得到相同的结果。它也比range(3)[::-1]
更易读。 - Dennis Williamsonfor i, val in enumerate(reversed(range(6))): print(i, val)
- NeilG1.
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")))
如果不使用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
for i in range(n)[::-1]
这将按相反的顺序给出i
。祝好! - Parthik B.