Python: วิธีที่สั้นที่สุดในการแทรกรายการจากสองรายการ


9

ฉันกำลังพยายามหาวิธีที่สั้นที่สุด (ตัวละครที่เป็นไปได้) เพื่อรับรายการ 3

รายการที่ 1 และรายการที่ 2 ได้รับมาให้ฉันเป็นอาร์กิวเมนต์แล้วและมีความยาวเท่ากัน

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

และรายการ 3 ควรมีลักษณะ (ใช่ต้องเป็นรายการ):

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

2
เป้าหมายของคุณคือการส่งออกรายการเฉพาะที่l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]กำหนดl1 = [1, 2, 3, 4, 5]และl2 = ['a', 'b', 'c', 'd', 'e']มอบหมายไปแล้วหรือเป็นแนวคิดที่l1และl2อาจเป็นสองรายการที่มีความยาวเท่ากันหรือไม่
xnor

คำตอบ:


13

Zip และ Sum

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

ลองออนไลน์!

ซิปรายการทั้งสองเข้าด้วยกันจากนั้นเพิ่ม tuples ทั้งหมดเพื่อสร้างรายการที่รวมกันหนึ่งรายการ ซิปใช้งานได้เฉพาะในกรณีที่รายการรับประกันว่ามีขนาดเท่ากันมิฉะนั้นจะตัดทอนรายการที่ยาวกว่า

เพิ่มการล้อมรอบ[* ]เพื่อแปลงเป็นรายการตามที่ FryAmTheEggman แนะนำ


2
หากใช้ Python 2 คุณสามารถใช้listแทน[* (...) ]+3 ไบต์ได้
Erik the Outgolfer

7

การกำหนดชิ้น

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

นี่คือสามไบต์นานกว่าการใช้โซลูชันของ Jo King c=[*sum(zip(b,a),())]แต่ก็ดี มันอาจจะสั้นกว่าตามสถานการณ์ (ฉันไม่สามารถนึกถึงที่ไหนได้)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.