inverser une chaîne en Python

je cherchais un moyen pour imprimer une chaîne à l'envers, et après une recherche rapide sur google, j'ai trouvé cette méthode:

Suppose ' a ' est une variable chaîne. Cela retournera la chaîne de caractères' a 'à l'envers:

a[::-1]

est-ce que quelqu'un peut expliquer comment cela fonctionne?

34
demandé sur Evpok 2009-04-20 01:35:54

13 réponses

bien sûr, le [::] est le tranche prolongée opérateur. Il vous permet de prendre des sous-chaînes. Fondamentalement, il fonctionne en spécifiant les éléments que vous voulez comme [début:fin:pas], et il fonctionne pour toutes les séquences. Deux choses soignées à ce sujet:

  • Vous pouvez omettre l'un ou plusieurs des éléments et il n' "la bonne chose"
  • les nombres négatifs pour begin, end et step ont un sens

pour begin et end, si vous donnez un nombre négatif, cela signifie Compter à partir de la fin de la séquence. Par exemple, si j'ai une liste:

l = [1,2,3]

puis l[-1] est 3, l[-2] est 2, et l[-3] est 1.

pour l'argument step , un nombre négatif signifie travailler en arrière à travers la séquence. Donc, pour une liste::

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

vous pourriez écrire l[::-1] qui signifie essentiellement d'utiliser une taille de pas de -1 en lisant la liste. Python va "faire la bonne chose "en remplissant le start et le stop ainsi il itère à travers la liste à l'envers et vous donne [10,9,8,7,6,5,4,3,2,1] .

j'ai donné les exemples avec des listes, mais les chaînes sont juste une autre séquence et fonctionnent de la même manière. Donc a[::-1] signifie construire une chaîne en joignant les caractères que vous obtenez en marchant à reculons à travers la chaîne.

72
répondu Rick Copeland 2014-11-13 10:17:56

la partie" -1 "représente la partie" step " du découpage-dans ce cas, elle passe par le caractère string 1 à la fois, mais en arrière (un pas négatif signifie démarrer à la fin de la chaîne). Si vous spécifiez l'étape à 2, par exemple, vous obtiendrez tous les autres caractères de la chaîne, en commençant avec la première. Si vous spécifiez un pas de -2, alors vous obtiendriez tous les autres caractères de la chaîne, en commençant par le dernier caractère et en travaillant à l'envers.

Donc, en un mot, si a = '12345' :

  • a[::2] devient 135
  • a[::-1] devient 54321
  • a[::-2] devient 531
7
répondu hbw 2009-04-19 21:43:30

je pense que ce qui suit fait un peu plus de sens pour les chaînes d'impression à l'envers, mais peut-être que c'est juste moi:

for char in reversed( myString ):  
  print( char, end = "" )
5
répondu Stefan Kendall 2009-04-19 22:48:09

c'est la notation de tranche prolongée :

sequence[start:end:step]

dans ce cas, step -1 signifie en arrière, et omettre le début et la fin signifie que vous voulez la chaîne entière.

3
répondu Steve Jessop 2014-11-13 09:50:23

il s'appelle Slice Notation en Python et vous pouvez lire un peu plus sur la façon dont il fonctionne ici:

expliquer la notation de la tranche de Python

2
répondu Gary Willoughby 2017-05-23 11:47:30

il utilise le découpage étendu - une chaîne est une séquence en Python, et partage certaines méthodes avec d'autres séquences (à savoir listes et tuples). Il y a trois parties à trancher - démarrer, arrêter et marcher. Tous ont des valeurs par défaut-start par défaut à 0, stop par défaut à len (sequence), et step par défaut à 1. En spécifiant [:: -1] Vous dites "tous les éléments de la séquence a, à partir du début, jusqu'à la fin en remontant un à la fois.

cette caractéristique a été introduit en python 2.3.5, et vous pouvez lire plus dans le Quoi de neuf docs .

2
répondu Adam 2009-04-19 21:43:36

[:: -1] donne une tranche de la chaîne A. la syntaxe complète est a[begin:end:step] ce qui donne un[commencer], [begin+step], ... [fin-1]. Lorsque step est négatif, vous commencez à la fin et vous déplacez pour commencer.

enfin, begin par défaut au début de la séquence, end to the end, et step to -1.

2
répondu Andrew Jaffe 2009-04-19 21:44:01

une chaîne est essentiellement une séquence de caractères et donc le découpage de fonctionnement. Ce que vous faites est en fait:

- > obtenir une tranche de " a " du début à la fin par Pas de 1 en arrière.

1
répondu fengshaun 2009-04-19 21:44:29

je le ferais comme ceci:

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

et il imprime: gnirts

1
répondu irnus44 2011-06-05 06:18:45

C'est l'étape de base de la notation, envisager la fonctionnalité:

[2:4:2]

ce qui se passe, c'est que l'indice est tranché entre la position 2 et la position 4, ce que fait la troisième variable, c'est qu'elle définit la taille du pas à partir de la première valeur. Dans ce cas, il retournerait a[2], puisque a[4] est une limite supérieure, seulement deux valeurs sont retournées et aucune deuxième étape n'a lieu. L'opérateur ( - ) minus inverse simplement la sortie step.

1
répondu Oliver 2017-05-03 19:09:18

Examiner la liste ci-dessous

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

une autre astuce pour inverser une liste peut être:

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
répondu Arindam Roychowdhury 2012-03-22 17:46:18

nous pouvons utiliser append et pop de le faire

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

    return ''.join(o)
0
répondu tony 2014-08-26 03:39:09

sans utiliser inversé ou [:: -1], voici une version simple basée sur la récursion que je considérerais comme la plus lisible:

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
répondu Joc Cing Tay 2017-09-29 03:20:59