Python:2つのリストからアイテムをインターリーブする最短の方法


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']、既に割り当てられた、またはアイデアはあることl1l2同じ長さの任意の二つのリストだろうか?
xnor 2018

回答:


13

ジップアンドサム

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

オンラインでお試しください!

2つのリストを一緒に圧縮してから、すべてのタプルを追加して、1つの結合リストを作成します。リストが同じサイズであることが保証されている場合にのみ、zipは機能します。それ以外の場合は、長いリストが切り捨てられます。

[* ]FryAmTheEggmanが提案するように、リストをリストに変換するための周囲を追加しました。


2
Python 2を使用している場合list[* (...) ]、+ 3バイトの代わりに使用できます。
Erik the Outgolfer 2018

6

スライスの割り当て

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

これはJo Kingのソリューションを使用する場合より3バイト長くなりますc=[*sum(zip(b,a),())]が、気の利いたものです。状況によっては短くなる可能性があります(ただし、どこにあるかはわかりません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.