Конкатенация списков строк поэлементно в Python


13

Это вопрос для игры в гольф на .

Предположим, у вас есть два списка строк, и вы хотите объединить соответствующие записи из каждого списка. Например, с a=list("abcd")и b=list("1234"), рассчитать ["a1","b2","c3","d4"].

Это тривиально в языках программирования на основе массива, где операции обычно применяются к спискам. Например, на моем языке игры в гольф Пип код просто a.b. Но в Python это не так просто.

Pythonic способ, вероятно, использовать zipи понимание списка (25 символов):

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

Другой метод mapс лямбда-функцией (23):

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

Вот самое короткое, что я придумал (21):

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

Есть ли более короткий метод?

Предположим, что списки имеют одинаковую длину, и все, что нужно, - mapэто что-то итеративное (поэтому в Python 3 все в порядке).



@Mast Содержит ли список советов ответ на этот конкретный вопрос?
Мартин Эндер

@ MartinBüttner Если это не так, это должно быть. Предотвращает загромождение и сохраняет все трюки вместе и т. Д.
Mast

Ответы:


14

20 символов

map(str.__add__,a,b)

Использует встроенный метод добавления строк метода, __add__который вызывается +в строках вместо вашей анонимной функции lambda x,y:x+y.


Вы знаете, я думал, str.__add__но по какой-то причине не проверял, было ли это короче.
DLosc

1
@DLosc реальным преимуществом этого ответа является использование mapнескольких итераций, которые автоматически отключают архивирование. Без этого это не было бы короче. Обратите внимание, что если в вашем коде вам нужно получить доступ к некоторым __*__методам, его можно сделать короче, from operator import *а затем использовать map(add,a,b).
Бакуриу
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.