Python在X位置合并字符串

时间:2017-05-17 16:55:43

标签: python string merge

我正在研究一些ASCII艺术,但我有一个子问题。我想将两个字符串合并在一起以创建一个更大的字符串,但我想合并字符串,以便每隔一个字母合并,左边的字符串将保留在它们所在的位置。所以,如果我有字符串"home""sweet",我希望输出为"hsowmeet";或者更长时间的合并,以及我打算以ASCII艺术为目的,^^^&&&&&&将合并到^&^&^&&&

我知道我已经离开但是我开始这样的事情:

def merge(s1, s2):
  new = s1[1:2] + s2[1:2] + s1[2:2] + s2[2:2]
  return new

但到目前为止它看起来很难看,并没有做我想做的事情

4 个答案:

答案 0 :(得分:0)

您可以使用zip_longest

from itertools import zip_longest

a = "^^^"
b = "&&&&&&"

def merge(a, b)
    return "".join((x+y for (x, y) in zip_longest(a, b, fillvalue="")))

merge(a, b) # '^&^&^&&&&'

答案 1 :(得分:0)

您可以对=关键字参数使用itertools.izip_longest和空字符串,然后按下返回值,直到它成为您想要的字符串。

这里输出fillvalue产生(我从结果中列出一个列表,使其可读):

izip_longest

现在你只需要连接所有字符串(长度为1或0)。一个解决方案是

>>> from itertools import izip_longest
>>> s1 = 'home'
>>> s2 = 'sweet'
>>> list(izip_longest(s1, s2, fillvalue=''))
[('h', 's'), ('o', 'w'), ('m', 'e'), ('e', 'e'), ('', 't')]

或者,只需使用常规>>> ''.join(sum(izip_longest(s1, s2, fillvalue=''), ())) 'hsowmeeet' 循环:

for

答案 2 :(得分:0)

from itertools import zip_longest

def merge_words(*words):
    return ''.join(c for tup in zip_longest(*words) for c in tup if c)

示例:

>>> merge_words('abc', '123456789')
'a1b2c3456789'
>>> merge_words('red', 'rover')
'rreodver'
>>> merge_words('Python', 'merging', 'strings')
'Pmsyettrrhgioinnnggs'

注意:如果使用Python 2,请将zip_longest更改为旧名称izip_longest

答案 3 :(得分:0)

您可以使用itertools

from itertools import izip_longest

def merge(s1, s2):
    return ''.join([i+j for i,j in izip_longest(s1, s2, fillvalue='')])

在python 3.x中,它是zip_longest而不是izip_longest