Łączy listy ciągów elementów w Pythonie

13

To jest pytanie z do gry w golfa w .

Załóżmy, że masz dwie listy ciągów i chcesz połączyć odpowiednie wpisy z każdej listy. Np. Za pomocą a=list("abcd")i b=list("1234"), oblicz ["a1","b2","c3","d4"].

Jest to trywialne w językach programowania opartych na macierzach, w których operacje zwykle dotyczą członków list. Na przykład w moim języku golfowym Pip kod jest po prostu a.b. Ale w Pythonie nie jest to takie proste.

Pythonicznym sposobem jest prawdopodobnie użycie zipi odczytanie listy (25 znaków):

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

Inną metodą jest mapfunkcja lambda (23):

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

Oto najkrótszy, jaki wymyśliłem (21):

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

Czy jest jakaś krótsza metoda?

Załóżmy, że listy mają tę samą długość i że potrzebny jest jakiś rodzaj iterowalności (więc mapw Pythonie 3 obiekt jest w porządku).

DLosc
źródło
możliwy duplikat Wskazówek do gry w golfa w Python
Mast
@Mast Czy lista porad zawiera odpowiedź na to konkretne pytanie?
Martin Ender
@ MartinBüttner Jeśli nie jest, powinien. Zapobiega bałaganu i utrzymuje wszystkie triki razem itp.
Maszt

Odpowiedzi:

14

20 znaków

map(str.__add__,a,b)

Używa wbudowanej metody dodawania ciągów znaków, __add__która jest wywoływana przez +ciągi zamiast funkcji anonimowej lambda x,y:x+y.

xnor
źródło
Wiesz, pomyślałem, str.__add__ale z jakiegoś powodu nie sprawdziłem, czy jest krótszy.
DLosc
1
@DLosc prawdziwą zaletą tej odpowiedzi jest używanie mapwielu iteracji, które automatycznie wyłączają kompresowanie. Bez tego nie byłby krótszy. Pamiętaj, że jeśli w kodzie musisz uzyskać dostęp do niektórych __*__metod, może być to krótsze, from operator import *a następnie skorzystaj z nich map(add,a,b).
Bakuriu