web-dev-qa-db-ja.com

Pythonで逆方向にループするにはどうすればいいですか?

私は次のようなことをすることについて話しています。

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は存在しません。

149
snakile

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にはrangexrangeという別々の関数はなく、rangeがあるだけです。これはPython 2のxrangeの設計に従っています。

230
Chinmay Kanchi
for x in reversed(whatever):
    do_something()

これは基本的にxrangeのオブジェクトやリストを含む、定義された順序を持つものすべてに働きます。

102
habnabit

入力が文字列の場合、これら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))
5
chocolate codes
def reverse(text):
    reversed = ''
    for i in range(len(text)-1, -1, -1):
        reversed += text[i]
    return reversed

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

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
alex.hunter