Concatenar listas de strings por item no Python


13

Esta é uma pergunta de para jogar golfe em .

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 zipe compreender uma lista (25 caracteres):

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

Outro método é mapcom 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 mapobjeto é bom no Python 3).



@Mast A lista de dicas contém uma resposta que aborda esta pergunta específica?
Martin Ender

@ MartinBüttner Se não for, deveria. Previne desordenar e mantém todos os truques togeter, etc.
Mast

Respostas:


14

20 caracteres

map(str.__add__,a,b)

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ônima lambda x,y:x+y.


Sabe, pensei, str.__add__mas por algum motivo não verifiquei se era mais curto.
DLosc

1
@DLosc, a vantagem real desta resposta é usar mapvá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 executar from operator import *e usar map(add,a,b).
Bakuriu
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.