开发者

How do I interleave strings in Python? [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. Closed 10 years ago.

How do I interleave strings in Python?

Given开发者_C百科

s1 = 'abc'
s2 = 'xyz'

How do I get axbycz?


Here is one way to do it

>>> s1 = "abc"
>>> s2 = "xyz"
>>> "".join(i for j in zip(s1, s2) for i in j)
'axbycz'

It also works for more than 2 strings

>>> s3 = "123"
>>> "".join(i for j in zip(s1, s2, s3) for i in j)
'ax1by2cz3'

Here is another way

>>> "".join("".join(i) for i in zip(s1,s2,s3))
'ax1by2cz3'

And another

>>> from itertools import chain
>>> "".join(chain(*zip(s1, s2, s3)))
'ax1by2cz3'

And one without zip

>>> b = bytearray(6)
>>> b[::2] = "abc"
>>> b[1::2] = "xyz"
>>> str(b)
'axbycz'

And an inefficient one

>>> ((s1 + " " + s2) * len(s1))[::len(s1) + 1]
'axbycz'


What about (if the strings are the same length):

s1='abc'
s2='xyz'
s3=''
for x in range(len(s1)):
   s3 += '%s%s'%(s1[x],s2[x])

I'd also like to note that THIS article is now the #1 Google search result for "python interleave strings," which given the above comments I find ironic :-)


A mathematical one, for fun

s1="abc"
s2="xyz"

lgth = len(s1)

ss = s1+s2

print ''.join(ss[i//2 + (i%2)*lgth] for i in xrange(2*lgth))

And another one:

s1="abc"
s2="xyz"

lgth = len(s1)

tu = (s1,s2)

print ''.join(tu[i%2][i//2] for i in xrange(2*lgth))
# or
print ''.join((tu[0] if i%2==0 else tu[1])[i//2] for i in xrange(2*lgth))
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜