【问题标题】:How to zip 2 strings into a new string in python [duplicate]如何在python中将2个字符串压缩成一个新字符串[重复]
【发布时间】:2016-11-23 00:04:35
【问题描述】:

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

a = '12345'
b = 'abcdefgh'

我尝试了zip(a,b),但它返回一个元组列表并在不等长字符串时切断:

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

我只需要取出新字符串。示例:

result = 1a2b3c4d5efgh

如何做到这一点?

【问题讨论】:

  • 你不能只使用for循环吗?从每个位置的 0 开始,将每个字母添加到第三个新字符串上。让 i 和 k 成为两个字符串的长度。

标签: python string zip


【解决方案1】:

一种可能的方法:加入内部元组,然后加入外部列表。

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

虽然,zip() 将始终在 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=''))

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

【讨论】:

  • 你如何得到这个以保留更大字符串中的剩余字符
  • @smitty - 我编辑了答案。如果您想保留结尾,则 zip 不是要走的路...
  • @smitty 在这种情况下,使用itertools.izip_longest() 它将用None 填充较小列表的值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2013-07-30
  • 2015-05-28
  • 1970-01-01
相关资源
最近更新 更多