Odwróć ciąg znaków w Pythonie

Szukałem sposobu, aby wydrukować ciąg do tyłu, i po szybkim wyszukiwaniu w google znalazłem tę metodę:

Załóżmy, że' a ' jest zmienną łańcuchową. Zwróci to ciąg' a ' do tyłu:

a[::-1]
Czy ktoś może wyjaśnić jak to działa?
Author: Evpok, 2009-04-20

13 answers

Jasne, [::]jest operatorem rozszerzonego plasterka . Pozwala na pobieranie podciągów. Zasadniczo działa poprzez określenie, które elementy chcesz jako [begin:end: step], i działa dla wszystkich sekwencji. Dwie fajne rzeczy:

    Można pominąć jeden lub więcej elementów i robi "właściwą rzecz"
  • liczby ujemne dla początku, końca i kroku mają znaczenie

Dla początku i końca, jeśli podasz liczbę ujemną, oznacza to liczenie od koniec sekwencji. Na przykład, jeśli mam listę:

l = [1,2,3]

Wtedy l[-1] jest 3, l[-2] jest 2, a l[-3] jest 1.

Dla argumentu step liczba ujemna oznacza pracę wstecz przez sekwencję. Więc dla listy::

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

Możesz napisać l[::-1], co w zasadzie oznacza użycie rozmiaru kroku -1 podczas czytania listy. Python "zrobi dobrą rzecz" podczas wypełniania start i stop, więc iteracja przez Listę Wstecz i daje [10,9,8,7,6,5,4,3,2,1].

Podałem przykłady z listami, ale łańcuchy są tylko kolejną sekwencją i działają w ten sam sposób. Tak więc a[::-1] oznacza budowanie ciągu znaków poprzez łączenie znaków, które otrzymujesz, przechodząc przez ciąg do tyłu.

 72
Author: Rick Copeland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 10:17:56

Część "-1 "reprezentuje część" krok " wycinania-w tym przypadku przechodzi przez znak ciągu 1 na raz, ale wstecz(krok ujemny oznacza początek od końca łańcucha). Jeśli na przykład określisz krok jako 2, otrzymasz każdy inny znak łańcucha, zaczynając od pierwszego. Jeśli podasz krok -2, otrzymasz każdy inny znak łańcucha, zaczynając od ostatniego znaku i pracując wstecz.

Więc, w skrócie, jeśli a = '12345':

  • a[::2] staje się 135
  • a[::-1] staje się 54321
  • a[::-2] staje się 531
 7
Author: hbw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-19 21:43:30

Myślę, że poniższy tekst ma nieco większy sens dla ciągów drukowanych w odwrotnej kolejności, ale może to tylko ja:

for char in reversed( myString ):  
  print( char, end = "" )
 5
Author: Stefan Kendall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-19 22:48:09

To zapis rozszerzonego fragmentu :

sequence[start:end:step]

W tym przypadku krok -1 oznacza wstecz, a pominięcie początku i końca oznacza, że chcesz cały ciąg.

 3
Author: Steve Jessop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 09:50:23

To się nazywa notacja Slice w Pythonie i możesz przeczytać więcej o tym, jak to działa tutaj:

Explain Python ' s slice notation

 2
Author: Gary Willoughby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:30

Używa rozszerzonego krojenia-ciąg znaków jest sekwencją w Pythonie i dzieli niektóre metody z innymi sekwencjami (mianowicie listami i krotkami). Do krojenia są trzy części-start, stop i step. Wszystkie z nich mają domyślne wartości-start domyślne 0, stop domyślne len (Sekwencja) i step domyślne 1. Określając [:: -1] mówisz " wszystkie elementy w sekwencji a, począwszy od początku, aż do końca, cofając się jeden po drugim.

Ta funkcja została wprowadzona w Pythonie 2.3.5, a więcej można przeczytać w What ' s New docs .

 2
Author: Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-19 21:43:36

[::-1] podaje wycinek ciągu znaków a. pełna składnia to a[begin:end:step] co daje [begin], [begin+step],... a [koniec-1]. Gdy krok jest ujemny, zaczynasz od końca i przesuń, aby rozpocząć.

Na koniec, domyślnie begin to początek sekwencji, end to the end i krok do -1.

 2
Author: Andrew Jaffe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-19 21:44:01

Ciąg znaków jest zasadniczo sekwencją znaków, więc operacja krojenia działa na nim. To co robisz jest w rzeczywistości:

-> uzyskaj kawałek 'a' od początku do końca w krokach 1 do tyłu.

 1
Author: fengshaun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-19 21:44:29

Zrobiłbym to tak:

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

I drukuje: gnirts

 1
Author: irnus44,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-05 06:18:45

Jest to podstawowa notacja Krokowa, rozważ funkcjonalność:

A[2:4:2]

Dzieje się tak, że indeks jest przecięty pomiędzy pozycją 2 i 4, trzecia zmienna ustawia rozmiar kroku zaczynając od pierwszej wartości. W tym przypadku zwraca a [2], Ponieważ a[4] jest górną granicą, zwracane są tylko dwie wartości i nie ma drugiego kroku. Operator ( - ) minus po prostu odwraca wyjście kroku.

 1
Author: Oliver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-03 19:09:18

Rozważ poniższą listę

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

Kolejną sztuczką do odwrócenia listy może być:

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]
 0
Author: Arindam Roychowdhury,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-22 17:46:18

Możemy użyć append i pop, aby to zrobić

def rev(s):
    i = list(s)
    o = list()
    while len(i) > 0:
        o.append(t.pop())

    return ''.join(o)
 0
Author: tony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-26 03:39:09

Bez użycia odwróconego lub [:: -1], oto prosta wersja oparta na rekurencji, którą uznałbym za najbardziej czytelną:

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]
 0
Author: Joc Cing Tay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-29 03:20:59