如何在python中将2个字符串压缩为新字符串

如何在python中将2个字符串压缩为新字符串,python,string,zip,Python,String,Zip,我试图找出如何将两个不同长度的字符串压缩成一个字符串,交替使用字符,并将剩余字符保留在较长的字符串中。例如: a = '12345' b = 'abcdefgh' 我尝试了zip(a,b),但当字符串长度不相等时,它会返回元组列表并截断: [('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', 'd'), ('5', 'e')] 我只需要把新的绳子拿出来。例如: result = 1a2b3c4d5efgh 如何做到这一点?一种可能的方法:先连接内部元组,然后

我试图找出如何将两个不同长度的字符串压缩成一个字符串,交替使用字符,并将剩余字符保留在较长的字符串中。例如:

a = '12345'
b = 'abcdefgh'
我尝试了
zip(a,b)
,但当字符串长度不相等时,它会返回元组列表并截断:

[('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', 'd'), ('5', 'e')]
我只需要把新的绳子拿出来。例如:

result = 1a2b3c4d5efgh

如何做到这一点?

一种可能的方法:先连接内部元组,然后连接外部列表

''.join(''.join(x) for x in zip(a,b))
但是,
zip()
a
b
之间的最短时间结束时(
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)

注意从Python3开始,
izip_longest()
现在是
zip_longest()

您如何让它在更大的内存中保留剩余的字符string@smitty-我编辑了答案。如果你想保留结尾,zip不是一个好办法…@smitty在这种情况下,使用
itertools.izip_longest()
它会用
None
填充较小列表的值。你就不能使用for循环吗?从每个字符串的位置0开始,将每个字母添加到第三个新字符串上。i和k是两条弦的长度。
''.join(''.join(x) for x in izip_longest(a, b, fillvalue=''))