2016-11-23 2 views
1

2つの異なる長さの文字列を1つの文字列に圧縮し、長い文字列の残りの文字を保存する方法を解明しようとしています。例:2つの文字列をPythonの新しい文字列に圧縮する方法

a = '12345' 
b = 'abcdefgh' 

私はzip(a,b)を試してみましたが、それはタプルのリストを返し、同じ長さの文字列が存在しない場合に遮断:

[('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', 'd'), ('5', 'e')] 

私はちょうど新しい文字列を取得する必要があります。例:

result = 1a2b3c4d5efgh 

これはどのようにすることができますか?

+0

あなただけのことができませんでしたforループを使用しますか?それぞれの位置0から始まり、各文字を3番目の新しい文字列に追加します。 iとkを2つの文字列の長さにする。 – Bridger

答えて

1

1つの方法:内側のタプルを結合し、次に外側のリストを結合します。

''.join(''.join(x) for x in zip(a,b)) 

ものの、zip()は常にときab終了する(あなたの例では1a2b3c4d5e)beween最短集計を停止します。以下Moinuddinにより示唆されるようizip_longestを使用して、

c = [] 
for x in range(max(len(a),len(b))): 
    c.append(a[x] if x < len(a) else '') 
    c.append(b[x] if x < len(b) else '') 
result=''.join(c) 

をか:あなたは最長の入力文字列の最後に到達したい場合は、例えば、別々にそれらを反復処理する必要があります

''.join(''.join(x) for x in izip_longest(a, b, fillvalue='')) 
+0

どうすれば大きな文字列の残りの文字を保存するのですか? – smitty

+0

@smitty - 答えを編集しました。あなたが最後を保存したいなら、zipは行く方法ではありません... – Pintun

+1

@smittyこの場合、 'itertools.izip_longest()'を使用して、より小さいリストの値を 'None' –

関連する問題