在python中交织字符串

时间:2013-11-13 07:38:08

标签: python string zip

我有一个测试问题,我必须将两个字符串中的字母插入一个,我使用以下代码完成:

'abcd'和'efghi' - > 'aebfcgdhi'

s1,s2='abcd' ,'efghi'
t=[a+b for a,b in zip(s1, s2) ]
ls1 = len(s1)
ls2 = len(s2)
if ls1 > ls2:
    t.extend(s1[ls2:])
elif ls1 < ls2:
    t.extend(s2[ls1:])
print ''.join(t)

我首先尝试使用以下内容,它似乎仅在字符串长度相同或s2是较长字符串时起作用。

 print  ''.join([a+b for a,b in zip(s1, s2)]) + max(s1,s2)[min(len(s1),len(s2)):]

我的逻辑在哪里出错了?

2 个答案:

答案 0 :(得分:1)

要使代码正常工作,您只需使用key函数中的max参数

print  ''.join([a+b for a,b in zip(s1, s2)]) + max(s1,s2, key=len)[min(len(s1),len(s2)):]

或者,您可以使用itertools.izip_longest进行迭代,直到两个迭代中的最大值耗尽为止。因此,无论字符串的长度如何,此解决方案都能正常工作。

import itertools
s1,s2='abcd' ,'efghi'
print "".join(y for x in itertools.izip_longest(s1, s2) for y in x if y)

<强>输出

aebfcgdhi

修改

不使用itertools

s1,s2='abcd' ,'efghi'
minLen = min(len(s1), len(s2))
print "".join(y for x in zip(s1, s2) for y in x) + s1[minLen:] + s2[minLen:]

答案 1 :(得分:1)

不使用itertools.izip_longest

>>> s1, s2 = 'abcd', 'efghi'
>>> l = min(len(s1), len(s2))
>>> ''.join(a+b for a, b in zip(s1, s2)) + s1[l:] + s2[l:]
'aebfcgdhi'