Python: cara terpendek untuk menyisipkan item dari dua daftar

9

Saya mencoba untuk mendapatkan cara terpendek (karakter mungkin) untuk mendapatkan Daftar 3.

Daftar 1 dan Daftar 2 sudah diberikan kepada saya sebagai argumen dan panjangnya sama.

l1 = [1, 2, 3, 4, 5]
l2 = ['a', 'b', 'c', 'd', 'e']

Dan Daftar 3 akan terlihat seperti (ya, itu harus daftar):

l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]
Matias
sumber
2
Apakah tujuan Anda untuk benar-benar menampilkan daftar spesifik yang l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]diberikan l1 = [1, 2, 3, 4, 5]dan l2 = ['a', 'b', 'c', 'd', 'e']sudah ditetapkan, atau apakah gagasan itu l1dan l2dapat berupa dua daftar dengan panjang yang sama?
xnor

Jawaban:

13

Zip dan Sum

[*sum(zip(l2,l1),())]

Cobalah online!

Ritsleting kedua daftar bersama lalu tambahkan semua tupel untuk membuat satu daftar gabungan. Zip hanya berfungsi jika daftar dijamin dengan ukuran yang sama, jika tidak memotong daftar yang lebih panjang.

Menambahkan sekitarnya [* ]untuk mengubahnya menjadi daftar seperti yang disarankan FryAmTheEggman.

Jo King
sumber
2
Jika menggunakan Python 2, Anda bisa menggunakan listbukannya [* (...) ]+3 byte.
Erik the Outgolfer
6

Tugas slice

c=a*2
c[1::2]=a
c[::2]=b

Ini tiga byte lebih lama daripada menggunakan solusi Jo King c=[*sum(zip(b,a),())], tapi bagus. Mungkin lebih pendek situasional (saya tidak bisa memikirkan di mana, meskipun).

Lynn
sumber