Esta es una pregunta de consejos para jugar golf en python .
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 zip
y una lista de comprensión (25 caracteres):
[x+y for x,y in zip(a,b)]
Otro método es map
con 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 map
objeto está bien en Python 3).
Respuestas:
20 caracteres
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ónimalambda x,y:x+y
.fuente
str.__add__
pero por alguna razón no verifiqué si era más corto.map
mú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 defrom operator import *
usar y luego usarmap(add,a,b)
.