una separar reemplazar por palabra letras invertir funcion especiales eliminar comparar caracteres caracter cadenas cadena python reverse slice

separar - Invierta una cadena de Python sin omitir el inicio y el final.



reemplazar caracteres en python (7)

Algunas otras formas de revertir una cadena:

word = "hello" reversed_word1 = word[-1: :-1] reversed_word2 = word[len(word)-1: :-1] reversed_word3 = word[:-len(word)-1 :-1]

Una cosa que debe tener en cuenta acerca de la notación de corte a[i:j:k] es que omitir i y j no siempre significa que seré 0 y j se convertirá en len(s) . Depende del signo de k . Por defecto, k es +1 .

  • Si k es + ve, entonces el valor predeterminado de i es 0 (comenzar desde el principio). Si es -ve, el valor predeterminado de i es -1 (comenzar desde el final).
  • Si k es + ve, entonces el valor predeterminado de j es len(s) (parada al final). Si es -ve, el valor predeterminado de j es -(len(s)+1) (detener al principio).

Ahora puede explicar a sus alumnos cómo Hello[::-1] imprime a olleH .

¿Cómo se invierte una cadena de Python sin omitir los argumentos de segmento de inicio y fin?

word = "hello" reversed_word = word[::-1]

Entiendo que esto funciona, pero ¿cómo obtendría el resultado al especificar los índices de inicio y finalización?

word = "hello" reversed_word = word[?:?:-1]

Es difícil explicar a los alumnos por qué la word[::-1] invierte una cadena. Es mejor si puedo darles un razonamiento lógico en lugar de "es la forma pitónica".

La forma en que explico la word[::1] es la siguiente: "No ha especificado el inicio, por lo que solo comienza desde el principio. No ha especificado el final, por lo que solo va hasta el final. Ahora el paso es 1, por lo que solo va desde el principio hasta el final 1 carácter por 1. " Ahora, cuando mis alumnos vean la word[::-1] , van a pensar: "¿No hemos especificado el inicio o el final, por lo que pasará por la cadena de caracteres -1 a la vez?"


Desde la fuente de Python 2 , esto se define con expresiones ternarias:

defstart = *step < 0 ? length-1 : 0; defstop = *step < 0 ? -1 : length;

Por lo tanto, cuando el inicio y la parada no se dan,

Si el paso es negativo:

  • comienzo es longitud - 1
  • stop es -1, (este es el índice C, difícil de implementar en Python, debe ser -length-1)

Si el paso es positivo:

  • inicio es 0
  • detener es longitud

Así que para responder a esta pregunta:

¿Cómo obtendría el resultado especificando los índices de inicio y finalización?

Para especificar esto usted mismo, use, por ejemplo, lo siguiente (ponga en una función para reusabilidad)

def my_slice(word, step): ''''''slice word with only step'''''' start = len(word)-1 if step < 0 else 0 stop = -len(word)-1 if step < 0 else len(word) return word[start:stop:step] word = "hello" step = -1 my_slice(word, step)

devoluciones

''olleh''


La string[begin:end:increment] notación string[begin:end:increment] se puede describir con el siguiente programa de Python:

def myreverse( string, begin, end, increment ): newstring = "" if begin >= 0 and end < 0: begin = -1 for i in xrange(begin, end, increment): try: newstring += string[i] except IndexError: pass return newstring


No estoy seguro de por qué, pero lo siguiente devolverá el reverso de la word :

word = "hello" word[len(word):-(len(word)+1):-1]

O...

word = "hello" word[len(word):-len(word)-1:-1]

Editar (Explicación):

Del comentario de jedward:

El parámetro intermedio es el más complicado, pero es bastante sencillo una vez que se da cuenta de que (a) los índices negativos para dividir el inicio / parada indican que desea contar "hacia atrás" desde el final de la cadena, y (b) el índice de parada es exclusivo, así que "contará" hasta pero se detendrá en / antes del índice de parada. word [len (word): - len (word) -1: -1] es probablemente más claro.

En respuesta a this comentario:

El tercer valor es en realidad el incremento, por lo que le está diciendo a Python que desea comenzar con la última letra y luego devolver todos los valores de (-1) st al último.

Aquí hay un dibujo (juntado en un minuto):

El dibujo muestra que también podemos usar esto en su lugar:

word = "hello" word[-1:-len(word)-1:-1] #-1 as the first


Si no especifica un número para notación de segmento, Python usará None como predeterminado. Entonces, simplemente puede escribir explícitamente los valores de None :

>>> word = "hello" >>> word[None:None:-1] ''olleh'' >>>


Enfoque recursivo:

def reverse(word): if len(word) <= 1: return word return reverse(word[1:]) + word[0]


In [27]: word Out[27]: ''hello'' In [28]: word[-1:-6:-1] Out[28]: ''olleh''

Por qué esto funciona:

In [46]: word Out[46]: ''hello'' In [47]: word[-1] # you want o to be your first value Out[47]: ''o'' In [48]: word[-5] # you want h to be your last value Out[48]: ''h'' In [49]: word[-1:-6:-1] # therefore ending point should be one Out[49]: ''olleh'' # past your last value that is -6