Pregunta

Estaba buscando una manera de imprimir una cadena al revés y después de una búsqueda rápida en Google, encontré este método:

Suponer a es una variable de cadena.Esto devolverá el a cuerda al revés :

a[::-1]

¿Alguien puede explicar cómo funciona eso?

¿Fue útil?

Solución

Claro, el [::] es la extendió operador de parte . Se le permite tomar subcadenas. Básicamente, funciona especificando cuáles son los elementos que desea como [begin: final: paso], y funciona para todas las secuencias. Dos cosas interesantes acerca de él:

  • Se pueden omitir uno o más de los elementos y lo hace "lo correcto"
  • Los números negativos para comenzar, terminar, y el paso tienen significado

Para empezar y terminar, si se le da un número negativo, que significa contar desde el final de la secuencia. Por ejemplo, si tengo una lista:

l = [1,2,3]

Entonces l[-1] es 3, l[-2] es 2, y l[-3] es 1.

Para el argumento step, un número negativo significa trabajar hacia atrás a través de la secuencia. Así que para una lista ::

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

Se puede escribir l[::-1] que básicamente significa usar un tamaño de paso de -1, mientras que la lectura a través de la lista. Python "hacer lo correcto" al rellenar el arranque y parada por lo que itera por la lista hacia atrás y le da [10,9,8,7,6,5,4,3,2,1].

Me he dado los ejemplos con las listas, pero las cadenas son más que otra secuencia y funcionan de la misma manera. Así a[::-1] significa construir una cadena uniendo los caracteres que se obtiene al caminar hacia atrás a través de la cadena.

Otros consejos

El "-1" parte representa la parte de "paso" del corte en lonchas, en este caso, va a través de la cadena de caracteres 1 a la vez, pero hacia atrás (un paso negativo significa empezar desde el final de la cadena). Si especifica el paso a ser 2, por ejemplo, se llega a todos los personajes de la cadena, empezando por el primero. Si especifica un paso de -2, entonces se obtendría cualquier otro carácter de la cadena, empezando por el último carácter y trabajar hacia atrás.

Así, en pocas palabras, si a = '12345':

  • a[::2] convierte 135
  • a[::-1] convierte 54321
  • a[::-2] convierte 531

Creo que el siguiente hace un poco más de sentido para cadenas de impresión a la inversa, pero tal vez eso es sólo conmigo:

for char in reversed( myString ):  
  print( char, end = "" )

Es la extendida notación rebanada :

sequence[start:end:step]

En este caso, la etapa -1 significa hacia atrás, y omitiendo el inicio y el final significa que desea toda la cadena.

Se llama notación de corte en Python y se puede leer un poco más de cómo funciona aquí:

Explicar de Python notación de corte

Es usando slicing extendida - una cadena es una secuencia en Python, y comparte algunos métodos con otras secuencias (es decir, listas y tuplas). Hay tres partes para rebanar - iniciar, detener y pasos. Todos ellos tienen valores por defecto - empezar por defecto es 0, parada por defecto a len (secuencia), y el paso por defecto es 1. Al especificar [:: - 1] que está diciendo "todos los elementos en una secuencia, comenzando desde el principio , hasta el fin de ir hacia atrás uno a la vez.

Esta característica se introdujo en Python 2.3.5, y se puede leer más en el Novedades docs .

[:: - 1] da una porción de la cadena a. La sintaxis completa es a[begin:end:step] lo que da una [empezar], un [+ comenzará paso], ... un [end-1]. Cuando la etapa es negativo, se inicia en el extremo y se mueven a comenzar.

Finalmente, comenzar valores predeterminados para el comienzo de la secuencia, extremo al extremo, y paso a -1.

lo haría así:

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

e imprime: gnirts

una cadena es esencialmente una secuencia de caracteres por lo que la operación de corte trabaja en ella. Lo que está haciendo en realidad es:

-> obtener una rebanada de 'a' de principio a fin en pasos de 1 hacia atrás

.

Es la notación básica paso, considerar la funcionalidad de:

a [2: 4: 2]

Lo que sucede es que se rodajas el índice entre la posición 2 y 4, lo que hace la tercera variable se establece el tamaño de paso a partir del primer valor. En este caso se volvería un lugar [2], puesto que una [4] es un límites superiores sólo dos valores son de retorno y no segundo paso toma. El (-) menos operador simplemente invierte la salida de paso

.

Considere la lista a continuación

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

Otro truco para invertir una lista puede ser:

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]

podemos usar append y pop para hacerlo

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

    return ''.join(o)

Sin utilizar invertido o [:: - 1], aquí es una versión simple basado en la repetición i consideraría como la más legible:

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]

Uso de sintaxis rebanada extendida

word = input ("Type a word which you want to reverse: ")
def reverse(word):
  word = word[::-1]
  return word
print (reverse(word))

Puede utilizar la función inversa (). Por ejemplo

x = "abcd"
for i in reversed(x):
        print(i, end="")
print("\n")
L = [1,2,3]
for i in reversed(L):
        print(i, end="")

impresiones dcba y 321

la primera forma predeterminada dos límites a 0 y la longitud de la secuencia, como antes, y un paso de -1 indica que la rebanada debe ir de derecha a izquierda en lugar de la habitual izquierda a derecha. El efecto, por lo tanto, es invertir la secuencia.

name="ravi"
print(name[::-1]) #ivar
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top