2009-07-17 11 views
19

decir que tengo una lista como esta:Combinar algunos elementos de la lista en una lista de Python

[a, b, c, d, e, f, g] 

? ¿Cómo modificar esa lista para que se parezca a esto?

[a, b, c, def, g] 

Yo preferiría mucho más que modificar la lista existente directamente, no se crea una nueva lista.

+1

Sobre qué base debe tener lugar la fusión? – Stephan202

+2

¿Qué son a, b, etc. (es decir, qué tipo de datos)? Tal como está, escribir esto en un intérprete de Python da un error porque estos son nombres no enlazados. –

+0

¿Desea siempre que esos elementos de la lista se concatenten o desea poder elegir dónde y cuántos más adelante? – tgray

Respuesta

27

Ese ejemplo es bastante vago, pero tal vez algo como esto?

items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 
items[3:6] = [''.join(items[3:6])] 

Básicamente hace una operación de empalme (o assignment to a slice). Elimina los elementos 3 a 6 e inserta una nueva lista en su lugar (en este caso una lista con un elemento, que es la concatenación de los tres elementos que se eliminaron).

Para cualquier tipo de lista, podría hacer esto (usando el operador + en todos los artículos sin importar su tipo es):

items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 
items[3:6] = [reduce(lambda x, y: x + y, items[3:6])] 

esto hace uso de la función reducelambda con una función que básicamente agrega los elementos utilizando el operador +.

+0

Esto funciona muy bien para una lista de cadenas. Si los elementos no son cadenas, necesitará usar algo que no sea '' .join() – tgray

+0

Tiene razón, agregué un ejemplo usando 'reduce' que funciona para cualquier tipo de elemento que admita' '' operador. No puedo hacer más que eso a menos que el OP amplíe su pregunta. – Blixt

+0

Su pregunta realmente no tiene sentido para nada más que cadenas. –

37

¿Sobre qué base debe realizarse la fusión? Tu pregunta es bastante vaga Además, supongo que a, b, ..., f se supone que son cadenas, es decir, 'a', 'b', ..., 'f'.

>>> x = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] 
>>> x[3:6] = [''.join(x[3:6])] 
>>> x 
['a', 'b', 'c', 'def', 'g'] 

Mira la documentación sobre sequence types, específicamente en mutable sequence types. Y tal vez también en string methods.

0

mis habilidades telepáticas no son particularmente grandes, pero aquí es lo que pienso que deseas:

def merge(list_of_strings, indices): 
    list_of_strings[indices[0]] = ''.join(list_of_strings[i] for i in indices) 
    list_of_strings = [s for i, s in enumerate(list_of_strings) if i not in indices[1:]] 
    return list_of_strings 

deben tener en cuenta, ya que podría no ser obvio, que no es lo mismo que lo que se propone en otra respuestas

4

sólo una variación

alist=["a", "b", "c", "d", "e", 0, "g"] 
alist[3:6] = [''.join(map(str,alist[3:6]))] 
print alist 
Cuestiones relacionadas