Daftar string item-bijaksana dalam Python

13

Ini adalah pertanyaan untuk bermain golf di .

Misalkan Anda memiliki dua daftar string, dan Anda ingin menggabungkan entri yang sesuai dari setiap daftar. Misal dengan a=list("abcd")dan b=list("1234"), hitung ["a1","b2","c3","d4"].

Ini sepele dalam bahasa pemrograman berbasis array, di mana operasi umumnya berlaku berdasarkan anggota. Misalnya, dalam Pip bahasa golf saya , kodenya sederhana a.b. Tetapi dengan Python, itu tidak mudah.

Cara Pythonic mungkin untuk menggunakan zipdan daftar pemahaman (25 karakter):

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

Metode lain adalah mapdengan fungsi lambda (23):

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

Berikut ini adalah yang terpendek yang saya buat (21):

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

Apakah ada metode yang lebih pendek?

Asumsikan bahwa daftar memiliki panjang yang sama dan bahwa beberapa jenis iterable adalah semua yang diperlukan (jadi mapobjek baik-baik saja di Python 3).

DLosc
sumber
kemungkinan duplikat dari Tips untuk bermain golf di Python
Mast
@ Mr Apakah daftar tips berisi jawaban yang membahas pertanyaan khusus ini?
Martin Ender
@ MartinBüttner Jika tidak, seharusnya begitu. Mencegah kekacauan dan menjaga semua trik bersama, dll.
Tiang

Jawaban:

14

20 karakter

map(str.__add__,a,b)

Menggunakan metode penambahan string build-in method __add__yang dipanggil oleh +string sebagai ganti fungsi anonim Anda lambda x,y:x+y.

Tidak
sumber
Anda tahu, saya memikirkannya str.__add__tetapi untuk beberapa alasan tidak memeriksa untuk melihat apakah itu lebih pendek.
DLosc
1
@ Dosc, manfaat sebenarnya dari jawaban ini adalah menggunakan mapdengan beberapa iterables, yang membedakan zipping secara otomatis. Tanpa itu tidak akan lebih pendek. Perhatikan bahwa jika dalam kode Anda Anda harus mengakses beberapa __*__metode mungkin lebih pendek untuk dilakukan from operator import *dan kemudian digunakan map(add,a,b).
Bakuriu