Verketten Sie Listen von Strings in Python

13

Dies ist eine zum Golfen in .

Angenommen, Sie haben zwei Listen mit Zeichenfolgen und möchten die entsprechenden Einträge aus jeder Liste verketten. ZB mit a=list("abcd")und b=list("1234"), rechnen ["a1","b2","c3","d4"].

Dies ist in Array-basierten Programmiersprachen trivial, in denen Operationen im Allgemeinen auf Listen angewendet werden. Zum Beispiel ist der Code in meiner Golfsprache Pip einfach a.b. Aber in Python ist das nicht so einfach.

Der pythonische Weg ist wohl zu gebrauchen zipund ein Listenverständnis (25 Zeichen):

[x+y for x,y in zip(a,b)]

Eine andere Methode ist mapmit einer Lambda-Funktion (23):

map(lambda x,y:x+y,a,b)

Folgendes ist das kürzeste, das ich mir ausgedacht habe (21):

map("".join,zip(a,b))

Gibt es eine kürzere Methode?

Angenommen, die Listen sind gleich lang und es wird nur eine Art von Iteration benötigt (ein mapObjekt ist also in Python 3 in Ordnung).

DLosc
quelle
Mögliche Kopie der Tipps zum Golfen in Python
Mast
@Mast Enthält die Tipps-Liste eine Antwort, die diese spezielle Frage beantwortet?
Martin Ender
@ MartinBüttner Wenn nicht, sollte es. Verhindert Unordnung und hält alle Tricks zusammen usw.
Mast

Antworten:

14

20 Zeichen

map(str.__add__,a,b)

Verwendet die eingebaute Methode zum Hinzufügen __add__von +Zeichenfolgen , die von Zeichenfolgen anstelle Ihrer anonymen Funktion aufgerufen wird lambda x,y:x+y.

xnor
quelle
Weißt du, ich habe darüber nachgedacht, str.__add__aber aus irgendeinem Grund nicht geprüft, ob es kürzer ist.
DLosc
1
@DLosc Der eigentliche Vorteil dieser Antwort ist die Verwendung mapmehrerer Iterables, die das Zippen automatisch deaktivieren. Ohne das wäre es nicht kürzer. Beachten Sie, dass , wenn in Ihrem Code müssen Sie einige der Zugriff auf __*__Methoden , um es kürzer sein kann zu tun , from operator import *und dann verwenden map(add,a,b).
Bakuriu