私は次のようなことをすることについて話しています。
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()
は、ステップを指定する3番目のパラメーターを取ります。それで、あなたは以下をすることができます。
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
の設計に従っています。
for x in reversed(whatever):
do_something()
これは基本的にxrange
のオブジェクトやリストを含む、定義された順序を持つものすべてに働きます。
入力が文字列の場合、これら3つの解決策はすべて同じ結果になります。
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")))
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