2010-06-21 71 views
4

如何交叉Python中的字符串?如何在Python中交叉字符串?

鉴于

s1 = 'abc' 
s2 = 'xyz' 

如何获得axbycz

+4

没有人会帮助你,如果你不表现出一定的** **的努力。除此之外,**这个问题可以使用Google **来解决。我不喜欢这样说,但在这种情况下,这是真的:**谷歌是你的朋友!** – 2010-06-21 10:28:07

+0

这不是连接。 – badp 2010-06-21 10:32:00

+1

不知道该说什么 - 我已经去了“交错”。 – 2010-06-21 10:33:30

回答

13

这里是一个办法做到这一点

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

它也适用于超过2串

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

这里是另一种方式

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

而另一

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

,一个没有zip

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

而且低效的一个

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

选择什么?哪一个是“最好只有一个明显的做法”? – 2011-06-30 19:43:43

+0

@gnibbler而这一个? :)''print''.join(sum([[a,b]为zip(s1,s2)],[]))中的[a,b]''。尽管如此。 – eyquem 2011-07-21 17:56:28

+1

我会选择“”.join(“”。join(i)for zip in(s1,s2,s3)),因为它可能是最容易用我的眼球解析的。 – lysdexia 2011-07-21 20:16:26

1

什么(如果字符串的长度相同):

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

我也想请注意,这篇文章现在是“python交织字符串”的第一名谷歌搜索结果,它给出了上面的评论,我觉得很讽刺:-)

+1

像这样的东西总是发生在SO上;) – BoltClock 2011-07-21 16:26:52

+0

而且它仍然是'python interleave strings'的谷歌搜索结果#1 – cat 2016-01-02 22:42:16

0

的数学之一,为了好玩

s1="abc" 
s2="xyz" 

lgth = len(s1) 

ss = s1+s2 

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

而另一个问题:

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)) 
相关问题