私は文字列を逆方向に印刷する方法を探していましたが、グーグルで簡単に検索した後、この方法を見つけました:
a
が文字列変数であるとします。これはa
文字列を逆方向に返します:
a[::-1]
誰もそれがどのように機能するか説明できますか?
確かに、[::]
は 拡張スライス 演算子です。サブストリングを取得できます。基本的に、[begin:end:step]として必要な要素を指定することで機能し、すべてのシーケンスで機能します。それについて2つのきちんとしたこと:
開始と終了の場合、負の数を指定すると、シーケンスの最後からカウントすることを意味します。たとえば、リストがある場合:
l = [1,2,3]
l[-1]
は3、l[-2]
は2、l[-3]
は1です。
step
引数の場合、負の数は、シーケンス内でbackwards動作することを意味します。リストの場合::
l = [1,2,3,4,5,6,7,8,9,10]
l[::-1]
と書くことができます。これは基本的に、リストを読みながら-1のステップサイズを使用することを意味します。 Pythonは、開始と終了を埋めるときに「正しいことをする」ので、リストを逆方向に反復して[10,9,8,7,6,5,4,3,2,1]
を返します。
リストを使用して例を示しましたが、文字列は別のシーケンスであり、同じように機能します。 a[::-1]
は、文字列を逆方向にたどって得た文字を結合して文字列を作成することを意味します。
「-1」部分はスライスの「ステップ」部分を表します。この場合、一度に1文字ずつ文字列を通過しますが、逆方向になります(負のステップは文字列の最後から開始することを意味します)。たとえば、ステップを2に指定した場合、最初の文字から始まる文字列の他のすべての文字が取得されます。 -2のステップを指定すると、文字列の他のすべての文字が取得され、最後の文字から始めて逆方向に処理されます。
簡単に言えば、a = '12345'
の場合:
a[::2]
は135
になりますa[::-1]
は54321
になりますa[::-2]
は531
になります以下は、逆の印刷文字列に対してもう少し理にかなっていると思いますが、それは私だけかもしれません:
for char in reversed( myString ):
print( char, end = "" )
Pythonのスライス表記と呼ばれます。ここで、その仕組みについてもう少し読むことができます。
私はこのようにします:
variable = "string"
message = ""
for b in variable:
message = b+message
print (message)
そしてそれは印刷します:gnirts
拡張スライシングを使用しています-文字列はPythonのシーケンスであり、他のシーケンス(リストとタプル)といくつかのメソッドを共有しています。スライスには、開始、停止、ステップの3つの部分があります。それらのすべてにデフォルト値があります-開始デフォルトは0、停止デフォルトはlen(sequence)、ステップデフォルトは1です。 、最後まで1つずつ逆方向に進みます。
この機能はPython 2.3.5で導入されました。詳細は What's New docs をご覧ください。
[::-1]は、ストリングaのスライスを提供します。完全な構文はa[begin:end:step]
これは、a [begin]、a [begin + step]、... a [end-1]を提供します。ステップが負の場合、最後から開始して開始に移動します。
最後に、beginはデフォルトでシーケンスの最初に、最後まで終わり、-1にステップします。
基本的なステップ表記です。次の機能を考慮してください。
a [2:4:2]
起こることは、インデックスが位置2と4の間でスライスされることです。3番目の変数は、最初の値から開始してステップサイズを設定します。この場合、a [4]は上限であるため、a [2]が返されます。2つの値のみが返され、2番目のステップは実行されません。 (-)マイナス演算子は、単にステップ出力を逆にします。
文字列は基本的に文字のシーケンスであるため、スライシング操作が機能します。あなたがしていることは実際には:
->「a」のスライスを最初から最後まで1ずつ戻します。
appendとpopを使用して実行できます
def rev(s):
i = list(s)
o = list()
while len(i) > 0:
o.append(t.pop())
return ''.join(o)
最初の2つの境界のデフォルトは0で、シーケンスの長さは前述のとおりで、ストライド-1は、スライスが通常の左から右ではなく右から左に移動することを示します。したがって、効果はシーケンスを逆にすることです。
name="ravi"
print(name[::-1]) #ivar
拡張スライス構文の使用
Word = input ("Type a Word which you want to reverse: ")
def reverse(Word):
Word = Word[::-1]
return Word
print (reverse(Word))
以下のリストを検討してください
l=[12,23,345,456,67,7,945,467]
リストを逆にするためのもう1つの方法は次のとおりです。
l[len(l):-len(l)-1:-1] [467, 945, 7, 67, 456, 345, 23, 12]
l[:-len(l)-1:-1] [467, 945, 7, 67, 456, 345, 23, 12]
l[len(l)::-1] [467, 945, 7, 67, 456, 345, 23, 12]
リバースまたは[::-1]を使用しない場合、再帰に基づいた最も簡単なバージョンを以下に示します。
def reverse(s):
if len(s)==2:
return s[-1] + s[0]
if len(s)==1:
return s[0]
return s[-1] + reverse(s[1:len(s)-1]) + s[0]
Reverse()関数を使用できます。例えば
x = "abcd"
for i in reversed(x):
print(i, end="")
print("\n")
L = [1,2,3]
for i in reversed(L):
print(i, end="")
dcba
および321
を出力します