我试图弄清楚如何将两个不同长度的字符串压缩成一个字符串,交替字符并将剩余的字符保留在较长的字符串中。例子:
a = '12345'
b = 'abcdefgh'
Run Code Online (Sandbox Code Playgroud)
我试过了,zip(a,b)但它返回一个元组列表,并在没有等长字符串时切断:
[('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', 'd'), ('5', 'e')]
Run Code Online (Sandbox Code Playgroud)
我只需要取出新的字符串。例子:
result = 1a2b3c4d5efgh
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
一种可能的方法:加入内部元组,然后加入外部列表。
''.join(''.join(x) for x in zip(a,b))
Run Code Online (Sandbox Code Playgroud)
虽然,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)
Run Code Online (Sandbox Code Playgroud)
或者,按照下面 Moinuddin 的建议,使用izip_longest:
''.join(''.join(x) for x in izip_longest(a, b, fillvalue=''))
Run Code Online (Sandbox Code Playgroud)
请注意,从 Python 3 开始,izip_longest()现在是zip_longest().
| 归档时间: |
|
| 查看次数: |
7761 次 |
| 最近记录: |