Estoy confundido sobre cómo funciona el siguiente código de Python para dividir una cadena en caracteres individuales usando b[:0] = a. ¿No debería ser solo b = ['abc']?

a='abc'
b=[]
b[:0]=a
print(b)

Salida:

b=[a,b,c]
5
Praneeth N.C 29 abr. 2020 a las 11:12

3 respuestas

La mejor respuesta

Esto se debe a que el constructor de listas puede usarse para dividir cualquier iterables, como cadenas.

Ni siquiera necesitas [:0],

list(a) # ['a', 'b', 'c']

O

b = []
b[:] = a # ['a', 'b', 'c']
2
Rishi Dev 29 abr. 2020 a las 08:26

Aquí hay dos cosas en juego

Cuando lo haces

b[:0] = <something>

El algo se inserta al principio de la lista (esto se agrega a un segmento de la lista)

Si lo hiciste

b[1:3] = ['a', 'b', 'c']

Luego, los elementos del índice 1 y 2 se reemplazan por los elementos de la derecha

Pruebe lo siguiente:

b = []
b[:0] = [1, 2, 3]

Notarás los elementos a la derecha insertados al comienzo de la lista

Ahora cuando lo haces

b[:0] = "abc"

Dado que los elementos en el lado derecho tienen que ser una secuencia, la cadena se desempaqueta a ['a', 'b', 'c'] y luego se insertan al comienzo de la lista

0
Rishi Dev 29 abr. 2020 a las 08:32

De acuerdo con Python Doc siempre que el lado izquierdo de la declaración de asignación se corte , python do __setitem__ por lo que en este caso coloca elementos del lado derecho al comienzo del corte. Echale un vistazo a éste ejemplo:

>>> a = [1,2,3,4]
>>> b = [5,6,7,8]
>>> b[3:5] = a
>>> print(b)
[5, 6, 7, 1, 2, 3, 4]
1
Siyanew 29 abr. 2020 a las 08:27