回答:
私の意見では、これは最も読みやすいです:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
へxrange(len(list)-1:-1:-1)
。後者は非常に多く-1
ので奇妙に見えるだけです。
range
と同じようにxrange
動作します。@hacksoiはユースケースに依存しますが、大きなバッファーで逆方向に反復しているとしましょう。10MBだとしましょう。逆のインデックスを最初に作成すると、数秒かかり、50 MB以上のメモリを消費します。反転ジェネレーターを使用すると数ミリ秒かかり、数バイトのメモリしか使いません。
コードが機能しなかった理由
あなたのコードはfor i in range (100, 0)
、罰金である以外
3番目のパラメーター(step
)はデフォルトです+1
。したがって、-1
後方に進むには、range()に3番目のパラメーターを指定する必要があります。
for i in range(100, -1, -1):
print(i)
注:これには、出力に100と0が含まれます。
複数の方法があります。
もっといい方法
Pythonの方法については、PEP 0322を確認してください。
これは、100から0(100と0を含む)までを出力するPython3 pythonicの例です。
for i in reversed(range(101)):
print(i)
reversed
PEP-322での実装方法の推奨は誤解を招くため、は反復可能オブジェクトreversed
を呼び出し__reversed__
て結果を返します。range
オブジェクトの場合、これは遅延評価されたrange_object
反復子です。つまり、この方法を使用することは、まだ遅延評価です。
for var in range(10,-1,-1)
働く
2つのリストを同時に逆方向にループしたいので、負のインデックスが必要でした。これは私の解決策です:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
結果:
-1 2
-2 5
-3 4
-4 3
-5 1
ああ、問題を間違って読んでください。配列を逆方向に移動することだと思いますか?もしそうなら、私はこれを持っています:
array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]
counter = 0
for loop in range(len(array)):
if loop <= len(array):
counter = -1
reverseEngineering = loop + counter
print(array[reverseEngineering])
global
とtime
最初の質問には関係ありません。
Pythonでカスタムリバースメカニズムを作成することもできます。これは、イテラブルを逆方向にループするためにどこでも使用できます
class Reverse:
"""Iterator for looping over a sequence backwards"""
def __init__(self, seq):
self.seq = seq
self.index = len(seq)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index -= 1
return self.seq[self.index]
>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
... print(i)
...
5
4
3
2
1
a = 10
for i in sorted(range(a), reverse=True):
print i
sorted
すると、リスト全体がメモリに不必要に保存されることに気付きますよね?これは無駄であり、大規模なユーザーには適していませんa
。