Ini adalah pertanyaan tips untuk bermain golf di python .
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 zip
dan daftar pemahaman (25 karakter):
[x+y for x,y in zip(a,b)]
Metode lain adalah map
dengan 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 map
objek baik-baik saja di Python 3).
Jawaban:
20 karakter
Menggunakan metode penambahan string build-in method
__add__
yang dipanggil oleh+
string sebagai ganti fungsi anonim Andalambda x,y:x+y
.sumber
str.__add__
tetapi untuk beberapa alasan tidak memeriksa untuk melihat apakah itu lebih pendek.map
dengan 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 dilakukanfrom operator import *
dan kemudian digunakanmap(add,a,b)
.