2016-11-23 84 views
1

我試圖弄清楚如何將兩個不同長度的字符串壓縮成一個字符串交替字符並保留較長字符串中的剩餘字符。例如:如何將2個字符串壓縮爲python中的新字符串

a = '12345' 
b = 'abcdefgh' 

我試圖zip(a,b)但它返回一個元組列表,當有不相等長度的字符串切斷:

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

我需要得到公正的新的串出。例如:

result = 1a2b3c4d5efgh 

這怎麼辦?

+0

你不能只是使用for循環?從每個位置開始,並將每個字母添加到第三個新字符串中。我和k是兩個弦的長度。 – Bridger

回答

1

一種可能的方法:加入內部元組,然後加入外部列表。

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

雖然,zip()就會停止聚集時最短beween ab端(在你的例子1a2b3c4d5e)。如果你想達到的最長輸入字符串的結尾,你必須以不同迭代它們,例如:

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) 

或者,在下面Moinuddin的建議,使用izip_longest

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

你會如何得到這個以保留更大字符串中的剩餘字符 – smitty

+0

@smitty - 我編輯了答案。如果你想保留結尾,zip不是要走的路... – Pintun

+1

@smitty在這種情況下,使用'itertools.izip_longest()'它將用'None'填充較小列表的值 –