2009-07-17 18 views
19

sagen, ich habe eine Liste wie folgt aus:Merge einige Listenelemente in einer Python-Liste

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

Wie diese Liste noch ändern, damit es so aussieht?

[a, b, c, def, g] 

Ich würde viel lieber, dass es die bestehende Liste direkt geändert, nicht eine neue Liste erstellt.

+1

Auf welcher Grundlage soll Ort der Zusammenführung nehmen? – Stephan202

+2

Was sind a, b usw. (d. H. Welcher Datentyp)? So wie es aussieht, gibt das Eingeben in einen Python-Interpreter einen Fehler, weil es sich um ungebundene Namen handelt. –

+0

Möchten Sie immer, dass diese Elemente in der Liste verkettet werden, oder möchten Sie später wo und wie viele auswählen können? – tgray

Antwort

27

Dieses Beispiel ist ziemlich vage, aber vielleicht so etwas?

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

Es spielt im Prinzip eine Spleißung (oder assignment to a slice) -Betrieb. Es entfernt die Elemente 3 bis 6 und fügt eine neue Liste ein (in diesem Fall eine Liste mit einem Element, die die Verkettung der drei Elemente darstellt, die entfernt wurden.)

Für jede Art von Liste könnten Sie tun dies (mit dem + Betreiber auf allen Einzelteilen, egal, was ihre Art ist):

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

Dies nutzt die reduce Funktion mit einer lambda Funktion, die zusammen fügt grundsätzlich die Elemente den + Operator.

+0

Dies funktioniert hervorragend für eine Liste von Zeichenfolgen. Wenn die Elemente keine Zeichenfolgen sind, müssen Sie etwas anderes als '' .join() verwenden. – tgray

+0

Sie haben recht, ich habe ein Beispiel mit 'reduce' hinzugefügt, das für alle Arten von Elementen funktioniert, die das' + 'unterstützen Operator. Mehr kann ich nicht tun, wenn das OP seine Frage nicht erweitert. – Blixt

+0

Seine Frage macht eigentlich keinen Sinn für Strings. –

37

Auf welcher Grundlage sollte die Zusammenführung erfolgen? Deine Frage ist eher vage. Außerdem nehme ich an, dass a, b, ..., f Strings sein sollen, also "a", "b", ..., "f".

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

Schauen Sie sich die Dokumentation auf sequence types, speziell auf mutable sequence types. Und vielleicht auch auf string methods.

0

meine telepathischen Fähigkeiten sind nicht besonders groß, aber hier ist das, was ich glaube, Sie wollen:

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 

Ich sollte anmerken, da es nicht offensichtlich sein könnte, dass es nicht das gleiche wie das, was in anderen vorgeschlagen Antworten.

4

nur eine Variation

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