invertir una cadena en python
¿Cómo puedo revertir una lista en Python? (30)
VALORES ORGANIZADORES:
En Python, el orden de las listas también se puede manipular con ordenación , organizando sus variables en orden numérico / alfabético:
Temporalmente:
print(sorted(my_list))
Permanente:
my_list.sort(), print(my_list)
Puedes ordenar con la bandera "reverse = True" :
print(sorted(my_list, reverse=True))
o
my_list.sort(reverse=True), print(my_list)
SIN ORGANIZAR
Tal vez usted no quiera ordenar los valores, sino solo invertir los valores. Entonces podemos hacerlo así:
print(list(reversed(my_list)))
** Los números tienen prioridad sobre el alfabeto en orden de listado. La organización de los valores de Python es impresionante.
¿Cómo puedo hacer lo siguiente en Python?
array = [0, 10, 20, 40]
for (i = array.length() - 1; i >= 0; i--)
Necesito tener los elementos de una matriz, pero desde el principio hasta el principio.
Creo que la mejor manera de revertir una lista en Python es hacer:
a = [1,2,3,4]
a = a[::-1]
print(a)
>>> [4,3,2,1]
El trabajo está hecho, y ahora tienes una lista invertida.
Encuentro (a diferencia de otras sugerencias) que l.reverse()
es, con mucho, la forma más rápida de revertir una larga lista en Python 3 y 2. Me gustaría saber si otros pueden replicar estos tiempos.
l[::-1]
es probablemente más lento porque copia la lista antes de revertirla. Agregar la list()
llamada alrededor del iterador hecho por reversed(l)
debe agregar algo de sobrecarga. Por supuesto, si desea una copia de la lista o un iterador, use esos métodos respectivos, pero si solo desea revertir la lista, l.reverse()
parece ser la forma más rápida.
Funciones
def rev_list1(l):
return l[::-1]
def rev_list2(l):
return list(reversed(l))
def rev_list3(l):
l.reverse()
return l
Lista
l = list(range(1000000))
Horarios de Python 3.5
timeit(lambda: rev_list1(l), number=1000)
# 6.48
timeit(lambda: rev_list2(l), number=1000)
# 7.13
timeit(lambda: rev_list3(l), number=1000)
# 0.44
Tiempos de Python 2.7
timeit(lambda: rev_list1(l), number=1000)
# 6.76
timeit(lambda: rev_list2(l), number=1000)
# 9.18
timeit(lambda: rev_list3(l), number=1000)
# 0.46
Esto es para duplicar la lista:
L = [0,10,20,40]
p = L[::-1] # Here p will be having reversed list
Esto es para revertir la lista en el lugar:
L.reverse() # Here L will be reversed in-place (no new list made)
Estrictamente hablando, la pregunta no es cómo devolver una lista a la inversa, sino cómo invertir una lista con una array
nombres de lista de ejemplo.
Para revertir una lista llamada "array"
use array.reverse()
.
El método de división increíblemente útil como se describe también se puede usar para invertir una lista en su lugar definiendo la lista como una modificación de la misma utilizando array = array[::-1]
.
Invertir in situ cambiando referencias de índices opuestos:
>>> l = [1,2,3,4,5,6,7]
>>> for i in range(len(l)//2):
... l[i], l[-1-i] = l[-1-i], l[i]
...
>>> l
[7, 6, 5, 4, 3, 2, 1]
La traducción más directa de su requerimiento a Python es la siguiente:
for i in xrange(len(array) - 1, -1, -1):
print i, array[i]
Esto es bastante críptico pero puede ser útil.
Para revertir la misma lista use:
array.reverse()
Para asignar la lista invertida a otra lista use:
newArray = array[::-1]
Posibles formas,
list1 = [3,4,3,545,6,4,34,243]
list1.reverse()
list1[::-1]
Puede hacer uso de la función reversed
para esto como:
>>> array=[0,10,20,40]
>>> for i in reversed(array):
... print(i)
Tenga en cuenta que reversed(...)
no devuelve una lista. Puede obtener una lista invertida utilizando list(reversed(array))
.
Puede utilizar reversed()
array=[0,10,20,40]
for e in reversed(array):
print e
Se puede hacer usando __reverse__
, que devuelve un generador.
>>> l = [1,2,3,4,5]
>>> for i in l.__reversed__():
... print i
...
5
4
3
2
1
>>>
Si desea almacenar los elementos de la lista invertida en alguna otra variable, entonces puede usar revArray = array[::-1]
o revArray = list(reversed(array))
.
Pero la primera variante es un poco más rápida:
z = range(1000000)
startTimeTic = time.time()
y = z[::-1]
print("Time: %s s" % (time.time() - startTimeTic))
f = range(1000000)
startTimeTic = time.time()
g = list(reversed(f))
print("Time: %s s" % (time.time() - startTimeTic))
Salida:
Time: 0.00489711761475 s
Time: 0.00609302520752 s
Siempre se puede tratar la lista como una pila simplemente sacando los elementos de la parte superior de la pila desde el final de la lista. De esa forma, se aprovechan las características primero y último de una pila. Por supuesto que estás consumiendo la primera matriz. Me gusta este método porque es bastante intuitivo, ya que se ve que una lista se consume desde el final mientras que la otra se crea desde el principio.
>>> l = [1,2,3,4,5,6]; nl=[]
>>> while l:
nl.append(l.pop())
>>> print nl
[6, 5, 4, 3, 2, 1]
También puede usar el complemento a nivel de bits del índice de matriz para recorrer la matriz a la inversa:
>>> array = [0, 10, 20, 40]
>>> [array[~i] for i, _ in enumerate(array)]
[40, 20, 10, 0]
Hagas lo que hagas, no lo hagas de esta manera.
Usar la dirección invertida (matriz) sería la mejor ruta probable.
>>> array = [1,2,3,4]
>>> for item in reversed(array):
>>> print item
Si necesita comprender cómo podría implementar esto sin utilizar el incorporado reversed
.
def reverse(a):
midpoint = len(a)/2
for item in a[:midpoint]:
otherside = (len(a) - a.index(item)) - 1
temp = a[otherside]
a[otherside] = a[a.index(item)]
a[a.index(item)] = temp
return a
Esto debería llevar tiempo O (N).
Usar rebanar, por ejemplo array = array [:: - 1], es un buen truco y muy Pythonic, pero quizás un poco oscuro para los novatos. El uso del método reverse () es una buena manera de ir en la codificación del día a día porque es fácil de leer.
Sin embargo, si necesita revertir una lista en su lugar como en una pregunta de entrevista, es probable que no pueda usar métodos integrados como estos. El entrevistador observará cómo aborda el problema en lugar de la profundidad del conocimiento de Python, se requiere un enfoque algorítmico. El siguiente ejemplo, usar un swap clásico, podría ser una forma de hacerlo:
def reverse_in_place(lst): # Declare a function
size = len(lst) # Get the length of the sequence
hiindex = size - 1
its = size/2 # Number of iterations required
for i in xrange(0, its): # i is the low index pointer
temp = lst[hiindex] # Perform a classic swap
lst[hiindex] = lst[i]
lst[i] = temp
hiindex -= 1 # Decrement the high index pointer
print "Done!"
# Now test it!!
array = [2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]
print array # Print the original sequence
reverse_in_place(array) # Call the function passing the list
print array # Print reversed list
**The result:**
[2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]
Done!
[654, 124, 24, 7, 1, 65, 60, 32, 27, 25, 19, 12, 9, 8, 5, 2]
Tenga en cuenta que esto no funcionará en tuplas o secuencias de cadenas, ya que las cadenas y tuplas son inmutables, es decir, no puede escribir en ellas para cambiar elementos.
Utilice la función invertida como sigue e imprímala
>>> for element in reversed(your_array):
... print element
Utilice la lista de comprensión:
[array[n] for n in range(len(array)-1, -1, -1)]
>>> L = [0,10,20,40]
>>> L.reverse()
>>> L
[40, 20, 10, 0]
O
>>> L[::-1]
[40, 20, 10, 0]
>>> L = [0,10,20,40]
>>> L[::-1]
[40, 20, 10, 0]
La sintaxis de división extendida se explica bien en la entrada Novedades de Python para la versión 2.3.5
Por solicitud especial en un comentario, esta es la documentación más reciente del segmento .
>>> L = [1, 2, 3, 4]
>>> L = [L[-i] for i in range(1, len(L) + 1)]
>>> L
[4, 3, 2, 1]
>>> l = [1, 2, 3, 4, 5]
>>> print(reduce(lambda acc, x: [x] + acc, l, []))
[5, 4, 3, 2, 1]
array=[0,10,20,40]
for e in reversed(array):
print e
def reverse(my_list):
L = len(my_list)
for i in range(L/2):
my_list[i], my_list[L-i - 1] = my_list[L-i-1], my_list[i]
return my_list
def reverse(text):
lst=[]
for i in range(0,len(text)):
lst.append(text[(len(text)-1)-i])
return ''''.join(lst)
print reverse(''reversed'')
def reverse(text):
output = []
for i in range(len(text)-1, -1, -1):
output.append(text[i])
return output
for x in array[::-1]:
do stuff
list_data = [1,2,3,4,5]
l = len(list_data)
i=l+1
rev_data = []
while l>0:
j=i-l
l-=1
rev_data.append(list_data[-j])
print "After Rev:- %s" %rev_data