0

だから私は文字列の2つの異なるリストを持っています; つまり、x と y です。

len(y) = len(x) - 1

元の順序で空の文字列にそれらを一緒に追加したいので、基本的に出力 = x1 + y1 + x2 + y2 + x3

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

#z = ''
z = 'AAAababBBBbcbcbCCC'

この空の文字列 z に追加する for ループを作成するにはどうすればよいですか?

私は通常行うだろう:

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

ただし、y は x より小さいため、x の最後の値は加算されません。

4

4 に答える 4

1

これはそれを行うべきです:

''.join([item for sublist in zip(x, y+['']) for item in sublist])
于 2013-07-12T21:21:05.977 に答える
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

私はより冗長な方が好きです。

于 2013-07-15T16:08:03.807 に答える
0

あなたがしたいitertools.izip_longestまた、この他の投稿をチェックしてください

newStr = ''.join(itertools.chain.from_iterable(
                   itertools.izip_longest(x,y, fillvalue='')
                 ))
于 2013-07-12T21:14:33.547 に答える
0

itertoolsのroundrobin レシピを使用できます。

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'
于 2013-07-12T21:16:15.040 に答える