2010-06-21 2 views
4

Как чередовать строки в Python?Как чередовать строки в Python?

Учитывая

s1 = 'abc' 
s2 = 'xyz' 

Как получить axbycz?

+4

Никто не собирается, чтобы помочь вам, если вы не показать некоторые ** ** усилия. Кроме того, ** этот вопрос можно решить с помощью Google **. Я не люблю это говорить, но в этом случае это правда: ** Google - ваш друг! ** –

+0

Это не конкатенация. – badp

+1

Не уверен, как это назвать - я пошел с чередованием. –

ответ

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

Что выбрать? Какой из них «предпочтительно только один очевидный способ сделать это»? –

+0

@gnibbler И этот? :) '' print '' .join (sum ([[a, b] для [a, b] в zip (s1, s2)], [])) ''. Приобретено. – eyquem

+1

Я выбрал бы «" .join ("". Join (i) для i в zip (s1, s2, s3)), так как это, пожалуй, самый простой способ проанализировать мои глазные яблоки. – lysdexia

1

Что о (если строки имеют одинаковую длину):

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

Я хотел бы также обратите внимание, что эта статья теперь является результатом поиска # 1 Google для «строк чередования python», которые, учитывая приведенные выше комментарии, я нахожу ироничными :-)

+1

Такие вещи всегда бывают на SO;) – BoltClock

+0

И все же это результат поиска # 1 google для 'строк чередования python' – cat

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)) 
Смежные вопросы