Esta é uma pergunta de dicas para jogar golfe em python .
Suponha que você tenha duas listas de cadeias e deseja concatenar as entradas correspondentes de cada lista. Por exemplo, com a=list("abcd")
e b=list("1234")
, calcule ["a1","b2","c3","d4"]
.
Isso é trivial nas linguagens de programação baseadas em array, onde as operações geralmente se aplicam aos membros das listas. Por exemplo, no meu idioma de golfe Pip , o código é simples a.b
. Mas em Python, não é tão fácil.
A maneira Pythonic é provavelmente usar zip
e compreender uma lista (25 caracteres):
[x+y for x,y in zip(a,b)]
Outro método é map
com uma função lambda (23):
map(lambda x,y:x+y,a,b)
O seguinte é o mais curto que eu vim com (21):
map("".join,zip(a,b))
Existe algum método mais curto?
Suponha que as listas tenham o mesmo comprimento e que seja necessário algum tipo de iterável (portanto, um map
objeto é bom no Python 3).
Respostas:
20 caracteres
Usa o método de adição de sequência de método incorporado
__add__
que é chamado por+
em seqüências de caracteres no lugar de sua função anônimalambda x,y:x+y
.fonte
str.__add__
mas por algum motivo não verifiquei se era mais curto.map
várias iteráveis, que eliminam o zíper automaticamente. Sem isso, não seria mais curto. Observe que se no seu código você precisar acessar alguns dos__*__
métodos, pode ser mais curto executarfrom operator import *
e usarmap(add,a,b)
.