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不存在。
答案 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中没有单独的
range
和xrange
函数,只有range
,它遵循Python 2xrange
的设计
答案 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