我正在尝试弄清楚如何将两个长度不同的字符串压缩成一个字符串,交替使用字符并保留较长字符串中剩余的字符。例如:
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)
或者,如下所建议的Moinuddin,使用izip_longest
:
''.join(''.join(x) for x in izip_longest(a, b, fillvalue=''))
注意,从Python 3开始,izip_longest()
现在是zip_longest()
。
itertools.izip_longest()
,它将用 None
填充较小列表的值。 - Moinuddin Quadri