Pythonで項目ごとに文字列のリストを連結する


13

これはでのゴルフの質問です。

文字列のリストが2つあり、各リストの対応するエントリを連結するとします。例えば、a=list("abcd")b=list("1234")を計算し["a1","b2","c3","d4"]ます。

これは、一般に操作がリストにメンバーごとに適用される配列ベースのプログラミング言語では簡単です。たとえば、私のゴルフ言語Pipのコードは単純a.bです。しかし、Pythonではそれほど簡単ではありません。

Pythonicの方法は、おそらくzipリスト内包表記(25文字)を使用することです。

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

別の方法はmap、ラムダ関数を使用する方法です(23):

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

以下は、私が思いついた最短のものです(21):

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

もっと短い方法はありますか?

リストの長さは同じで、必要なのは何らかの反復可能なものだけであると仮定します(したがって、mapPython 3ではオブジェクトは問題ありません)。



@Mastヒントリストには、この特定の質問に対処する回答が含まれていますか?
マーティンエンダー

@MartinBüttnerもしそうでなければ、そうすべきです。散らかるのを防ぎ、すべてのトリックを維持します。
マスト

回答:


14

20文字

map(str.__add__,a,b)

無名関数の代わりに文字列上__add__で呼び出される組み込みメソッドの文字列追加メソッドを使用し+ますlambda x,y:x+y


ご存知かと思いますstr.__add__が、何らかの理由でそれが短いかどうかを確認しませんでした。
DLosc

1
@DLoscこの答えの真の利点はmap、複数の反復可能要素を使用することです。これにより、自動的に圧縮が解除されます。それがなければ、短くなりません。コード内でいくつかの__*__メソッドにアクセスする必要がある場合は、実行してからfrom operator import *使用する方が短い場合がありますmap(add,a,b)
バクリウ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.