41

文字列を逆方向に印刷する方法を探していましたが、グーグルですばやく検索した後、次の方法を見つけました。

a文字列変数であるとします。aこれにより、文字列が逆方向に返されます。

a[::-1]

誰かがそれがどのように機能するか説明できますか?

4

16 に答える 16

78

確かに、これ[::]拡張スライス演算子です。部分文字列を取ることができます。基本的に、必要な要素を [begin:end:step] として指定することで機能し、すべてのシーケンスで機能します。それについての2つの素晴らしい点:

  • 1 つまたは複数の要素を省略でき、「正しいこと」を行います。
  • begin、end、step の負の数には意味があります

begin と end に負の数を指定すると、シーケンスの最後からカウントすることを意味します。たとえば、リストがある場合:

l = [1,2,3]

次に、 3、2、1l[-1]です。 l[-2]l[-3]

step引数の負の数は、シーケンスを逆方向に処理することを意味しますリストの場合::

l = [1,2,3,4,5,6,7,8,9,10]

l[::-1]基本的に、リストを読みながら -1 のステップ サイズを使用することを意味する、と書くことができます。Python は start と stop を埋めるときに「正しいことをする」ので、リストを逆方向に反復して[10,9,8,7,6,5,4,3,2,1].

リストの例を示しましたが、文字列は単なる別のシーケンスであり、同じように機能します。つまりa[::-1]、文字列を逆方向に歩いて取得した文字を結合して文字列を作成することを意味します。

于 2009-04-19T21:43:46.627 に答える
8

「-1」の部分は、スライスの「ステップ」部分を表します。この場合、一度に 1 文字ずつ文字列を逆方向に通過します (負のステップは、文字列の末尾から開始することを意味します)。たとえば、ステップを 2 に指定すると、文字列の最初の文字から 1 文字おきに取得されます。-2 のステップを指定すると、最後の文字から開始して逆方向に、文字列の 1 文字おきに取得されます。

つまり、一言で言えば、 if a = '12345':

  • a[::2]になる135
  • a[::-1]になる54321
  • a[::-2]になる531
于 2009-04-19T21:43:30.513 に答える
3

私はこのようにします:

variable = "string"
message = ""
for b in variable:
    message = b+message
print (message)

そしてそれは印刷します:gnirts

于 2011-06-04T19:33:28.450 に答える
3

それは拡張スライス表記です:

sequence[start:end:step]

この場合、ステップ -1 は逆方向を意味し、開始と終了を省略すると、文字列全体が必要になることを意味します。

于 2009-04-19T21:43:04.710 に答える
2

これは Python でのスライス記法と呼ばれ、ここでそのしくみをもう少し詳しく読むことができます。

Pythonのスライス表記について解説

于 2009-04-19T21:42:52.653 に答える
2

拡張スライシングを使用しています。文字列は Python のシーケンスであり、いくつかのメソッドを他のシーケンス (つまり、リストとタプル) と共有しています。スライスには、開始、停止、ステップの 3 つの部分があります。それらのすべてにデフォルト値があります - start のデフォルトは 0、stop のデフォルトは len(sequence)、step のデフォルトは 1 です。 [::-1] を指定すると、「最初から始まるシーケンス a のすべての要素、最後に 1 つずつ逆方向に進みます。

この機能は Python 2.3.5 で導入されました。詳細については、What's New docsを参照してください。

于 2009-04-19T21:43:36.317 に答える
2

[::-1] は文字列 a のスライスを返します。完全な構文はa[begin:end:step] 、a[begin]、a[begin+step]、... a[end-1] を与えるものです。step が負の場合、end から開始し、begin に移動します。

最後に、begin のデフォルトはシーケンスの先頭、末尾から末尾、ステップは -1 です。

于 2009-04-19T21:44:01.447 に答える
1

文字列は本質的に一連の文字であるため、スライス操作はそれに対して機能します。あなたがしていることは実際には次のとおりです。

-> 'a' のスライスを最初から最後まで 1 ずつ逆方向に取得します。

于 2009-04-19T21:44:29.030 に答える
0

以下のリストを検討してください

l=[12,23,345,456,67,7,945,467]

リストを逆にする別のトリックは次のとおりです。

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]
于 2012-03-22T17:46:18.767 に答える