2009-07-17 24 views
19

dire che ho un elenco come questo:Unire alcuni elementi di una lista in una lista Python

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

Come modificare tale elenco in modo che assomiglia a questo?

Preferirei che abbia modificato direttamente l'elenco esistente, non creato un nuovo elenco.

+1

Su quali basi dovrebbe fusione avvenire? – Stephan202

+2

Cosa sono a, b, ecc. (Cioè quale tipo di dati)? Così com'è, digitarlo in un interprete Python dà un errore perché questi sono nomi non associati. –

+0

Vuoi sempre quegli elementi nell'elenco concatenati o vuoi essere in grado di scegliere dove e quanti più tardi? – tgray

risposta

27

Questo esempio è piuttosto vago, ma forse qualcosa di simile?

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

che fondamentalmente un'operazione di giunzione (o assignment to a slice). Rimuove gli elementi da 3 a 6 e inserisce una nuova lista al loro posto (in questo caso un elenco con un elemento, che è la concatenazione dei tre elementi rimossi.)

Per qualsiasi tipo di elenco, è possibile eseguire questo (utilizzando l'operatore + su tutti gli articoli indipendentemente dal loro tipo è):

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

questo fa uso della funzione reduce con una funzione lambda che aggiunge sostanzialmente gli articoli insieme utilizzando l'operatore +.

+0

Funziona alla grande per un elenco di stringhe. Se gli elementi non sono stringhe, dovrai usare qualcosa di diverso da '' .join() – tgray

+0

Hai ragione, ho aggiunto un esempio usando 'reduce' che funziona per qualsiasi tipo di oggetto che supporti' + ' operatore. Non posso fare di più se l'OP non espande la sua domanda. – Blixt

+0

La sua domanda non ha davvero senso per nient'altro che stringhe. –

37

Su quali basi dovrebbe avvenire la fusione? La tua domanda è piuttosto vaga. Inoltre, suppongo che a, b, ..., f siano considerate stringhe, cioè 'a', 'b', ..., 'f'.

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

Partenza la documentazione sul sequence types, in particolare su mutable sequence types. E forse anche su string methods.

0

mie capacità telepatiche non sono particolarmente grandi, ma qui è quello che penso che vuoi:

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 

Vorrei sottolineare, dal momento che potrebbe non essere ovvio, che non è lo stesso di quello che viene proposto in altri risposte.

4

solo una variante

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