Concatenar listas de cadenas en cuanto a elementos en Python

13

Esta es una pregunta de para jugar golf en .

Suponga que tiene dos listas de cadenas y desea concatenar las entradas correspondientes de cada lista. Por ejemplo con a=list("abcd")y b=list("1234"), calcular ["a1","b2","c3","d4"].

Esto es trivial en los lenguajes de programación basados ​​en matrices, donde las operaciones generalmente se aplican a los miembros en las listas. Por ejemplo, en mi lenguaje de golf Pip , el código es simple a.b. Pero en Python, no es tan fácil.

La forma pitónica es probablemente usar zipy una lista de comprensión (25 caracteres):

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

Otro método es mapcon una función lambda (23):

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

El siguiente es el más corto que se me ocurrió (21):

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

¿Hay algún método más corto?

Suponga que las listas tienen la misma longitud y que todo lo que se necesita es algún tipo de iterable (por lo que un mapobjeto está bien en Python 3).

DLosc
fuente
posible duplicado de Consejos para jugar golf en Python
Mástil
@Mast ¿La lista de consejos contiene una respuesta que aborde esta pregunta específica?
Martin Ender
@ MartinBüttner Si no es así, debería serlo. Previene el desorden y mantiene todos los trucos juntos, etc.
Mástil

Respuestas:

14

20 caracteres

map(str.__add__,a,b)

Utiliza el método de adición de cadenas del método incorporado __add__que se invoca mediante +cadenas en lugar de su función anónima lambda x,y:x+y.

xnor
fuente
Sabes, pensé, str.__add__pero por alguna razón no verifiqué si era más corto.
DLosc
1
@DLosc, la verdadera ventaja de esta respuesta es utilizar mapmúltiples iterables, que disipan la compresión automáticamente. Sin eso no sería más corto. Tenga en cuenta que si en su código tiene que acceder a algunos de los __*__métodos, puede ser más corto de from operator import *usar y luego usar map(add,a,b).
Bakuriu