2012-03-07 9 views
5

Supongamos que tengo una lista simple de Python como esto:Luchando con la sintaxis de división para unirse a elementos de la lista de una parte de una lista

>>> l=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] 

Ahora supongamos que quiero combinar l[2:6] a un solo elemento de la siguiente manera:

>>> l 
['0', '1', '2345', '6', '7', '8', '9'] 

soy capaz de hacerlo en los pasos en una nueva lista, así:

>>> l2=l[0:2] 
>>> l2.append(''.join(l[2:6])) 
>>> l2.extend(l[6:]) 
>>> l2 
['0', '1', '2345', '6', '7', '8', '9'] 

es T aquí una manera (que me falta) para hacer esto más simple y en su lugar en la lista original l?

Editar

Como de costumbre, Sven Marnach tenía la respuesta instantánea perfecta:

l[2:6] = ["".join(l[2:6])] 

Había probado:

l[2:6] = "".join(l[2:6]) 

Pero sin las llaves, la cadena producida por la unión Luego, se trató como iterable colocando a cada personaje de nuevo en la lista e invirtiendo la unión.

considerar:

>>> l=['abc','def','ghk','lmn','opq'] 
>>> l[1:3]=[''.join(l[1:3])] 
>>> l 
['abc', 'defghk', 'lmn', 'opq'] #correct 

>>> l=['abc','def','ghk','lmn','opq'] 
>>> l[1:3]=''.join(l[1:3]) 
>>> l 
['abc', 'd', 'e', 'f', 'g', 'h', 'k', 'lmn', 'opq'] #not correct 

Respuesta

11

una asignación rebanada:

l[2:6] = ["".join(l[2:6])] 
+0

¡¡¡Son las llaves alrededor de la unión que me faltaba !!! ¡Gracias! – dawg

1

Sí, bastante simple:

l[2:6] = [''.join(l[2:6])] 
1

Asegúrese de tener en cuenta la diferencia entre una asignación rebanada:

>>> a = range(3) 
>>> a 
[0, 1, 2] 
>>> a[1:3] = [4, 5, 6] 
>>> a 
[0, 4, 5, 6] 

y una asignación EXTENDED rebanada:

>>> a=range(6) 
>>> a 
[0, 1, 2, 3, 4, 5] 
>>> a[::2] 
[0, 2, 4] 
>>> a[::2]=[-1,-2,-3] 
>>> a 
[-1, 1, -2, 3, -3, 5] 
>>> a[::2]=[-1,-2] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: attempt to assign sequence of size 2 to extended slice of size 3 

Si la LH es una rebanada extendido, el RH es necesario que haya una secuencia de la misma longitud. Una asignación de segmento regular puede cambiar la longitud de la lista en el LH.

Cuestiones relacionadas