Об'єднайте списки рядків, що належать до пункту в Python


13

Це питання щодо гольфу в .

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

Це тривіально для мов програмування на основі масиву, де операції, як правило, застосовуються впорядковано до списку. Наприклад, у моїй мові для гольфу Pip код просто a.b. Але в Python це не так просто.

Пітонічний спосіб, ймовірно, використання 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).


можливий дублікат Поради щодо гольфу в Python
щогли

@Mast Чи містить список підказок відповідь, яка стосується цього конкретного питання?
Мартін Ендер

@ MartinBüttner Якщо це не так, то слід. Заважає захаращувати та зберігає всі трюки тогетер тощо
щогли

Відповіді:


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.