明智地连接两个字符串元素

Concatenate two strings elements wise

我遇到了一个问题,我必须明智地连接两个字符串元素 例如:

str1 = "ABCD"
str2 = "EFGH"
output = "AEBFCGDH"

这段代码是我写的

op = ''
op = op.join([i + j for i, j in zip(str1, str2)])
print(op)

它起作用了,但我想知道两个字符串的长度是否不同 例如:

str1 = "ABC"
str2 = "DEFGH"
output = "ADBECFGH"

or

str1 = "ABCDG"
str2 = "DEF"
output = "ADBECFDG"

我该如何为此编码?

简单的解决方案:

str1 = "ABCDG"
str2 = "DEF"
suffix_start = min(len(str1), len(str2))
suffix = str1[suffix_start:]+str2[suffix_start:]
output = ''.join([i + j for i, j in zip(str1, str2)]) + suffix
print(output)  # ADBECFDG

您可以使用较短的字符串,压缩至其长度,然后连接较长字符串的剩余部分。 例如:

str1 = 'ABC'
str2 = 'DEFGH'
op = ''
if len(str1)>len(str2):
    op = op.join([i + j for i, j in zip(str1, str2)])+str1[len(str2):]
else:
    op = op.join([i + j for i, j in zip(str1, str2)]) + str2[len(str1):]
print(op) # output: ADBECFGH

zip() 只压缩到两个可迭代对象中较短的一个。 参见:https://docs.python.org/3.3/library/functions.html#zip

只需将 zip() 切换为 zip_longest():

from itertools import zip_longest
str1 = "ABCDG"
str2 = "DEF"
output = ''.join([i + j for i, j in zip_longest(str1, str2, fillvalue="")])
print(output)  # ADBECFDG