Python'da item-wise dizelerinin listelerini birleştirin


13

Bu golf için soru .

İki dizgi listeniz olduğunu ve her listeden karşılık gelen girişleri birleştirmek istediğinizi varsayalım. Örneğin, a=list("abcd")ve b=list("1234")ile hesaplayın ["a1","b2","c3","d4"].

İşlemlerin listelere genellikle üye olarak uygulandığı dizi tabanlı programlama dillerinde bu önemlidir. Örneğin, Pip dilimde , kod basitçe a.b. Ama Python'da bu o kadar kolay değil.

Pythonic yolu muhtemelen kullanmak zipve bir liste kavrama (25 karakter):

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

Başka bir yöntem maplambda fonksiyonudur (23):

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

Aşağıdakiler geldiğim en kısa şey (21):

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

Daha kısa bir yöntem var mı?

Listelerin aynı uzunlukta olduğunu ve gerekli olan her şeyin tekrarlanabilir olduğunu varsayalım ( mapPython 3'te bir nesne iyi).



@Mast İpuçları listesi bu soruyu cevaplayan bir cevap içeriyor mu?
Martin Ender

@ MartinBüttner Değilse, olması gerekir. Dağınıklığı önler ve tüm hileleri birlikte tutar.
Mast

Yanıtlar:


14

20 karakter

map(str.__add__,a,b)

Anonim işlevinizin yerine dizelerde __add__çağrılan yerleşik yöntem dizesi ekleme yöntemini kullanır .+lambda x,y:x+y


Düşündüm, str.__add__ama nedense daha kısa olup olmadığını kontrol etmedi.
DLosc

1
@DLosc, bu cevabın gerçek avantajı, mapziplemeyi otomatik olarak engelleyen çoklu tekrarlanabilirlerle kullanmaktır . Bu olmadan daha kısa olmazdı. Kodunuzda bazı __*__yöntemlere erişmeniz gerekiyorsa, yapmanın from operator import *ve kullanmanın daha kısa olabileceğini unutmayın map(add,a,b).
Bakuriu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.