2013-07-12 2 views
0

поэтому у меня есть два разных списка строк; т. е. х и у.Добавьте два разных значения в строку из разных списков

len(y) = len(x) - 1 

я хочу, чтобы добавить их в пустую строку в исходном порядке, в основном выходной сигнал = x1 + y1 + x2 + y2 + X3

x = ['AAA','BBB','CCC'] 
y = ['abab','bcbcb'] 

#z = '' 
z = 'AAAababBBBbcbcbCCC' 

, как я могу создать для цикла добавить к этой пустой строке z?

я обычно хотел бы сделать:

for p,q in zip(x,y): 

, но так как у в меньше х, было бы не добавить последнее значение х

ответ

0

Вы можете использовать roundrobinrecipe из itertools:

from itertools import * 
def roundrobin(*iterables): 
    "roundrobin('ABC', 'D', 'EF') --> A D E B F C" 
    # Recipe credited to George Sakkis 
    pending = len(iterables) 
    nexts = cycle(iter(it).next for it in iterables) 
    while pending: 
     try: 
      for next in nexts: 
       yield next() 
     except StopIteration: 
      pending -= 1 
      nexts = cycle(islice(nexts, pending)) 
x = ['AAA','BBB','CCC'] 
y = ['abab','bcbcb'] 
print "".join(roundrobin(x,y)) 
#AAAababBBBbcbcbCCC   

Или с itertools.izip_longest вы могли бы сделать:

>>> from itertools import izip_longest 
>>> ''.join([''.join(c) for c in izip_longest(x,y,fillvalue = '')]) 
'AAAababBBBbcbcbCCC' 
1

Это должно сделать это:

''.join([item for sublist in zip(x, y+['']) for item in sublist]) 
0
from itertools import izip_longest 

x = ['AAA','BBB','CCC'] 
y = ['abab','bcbcb'] 

unfinished_z = izip_longest(x,y,fillvalue='') # an iterator 
unfinished_z = [ ''.join(text) for text in unfinished_z ] # a list 
z = ''.join(unfinished_z) # the string AAAababBBBbcbcbCCC 

Я предпочитаю больше подробностей.

Смежные вопросы