我正在研究一些ASCII艺术,但我有一个子问题。我想将两个字符串合并在一起以创建一个更大的字符串,但我想合并字符串,以便每隔一个字母合并,左边的字符串将保留在它们所在的位置。所以,如果我有字符串"home"
和"sweet"
,我希望输出为"hsowmeet"
;或者更长时间的合并,以及我打算以ASCII艺术为目的,^^^
和&&&&&&
将合并到^&^&^&&&
。
我知道我已经离开但是我开始这样的事情:
def merge(s1, s2):
new = s1[1:2] + s2[1:2] + s1[2:2] + s2[2:2]
return new
但到目前为止它看起来很难看,并没有做我想做的事情
答案 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