Python在X位置合并字符串
我正在研究一些ASCII艺术,但我有一个子问题。我想把两个字符串合并在一起创建一个更大的字符串,但我想合并字符串,这样每隔一个字母合并一次,剩下的就留在原来的位置。因此,如果我有字符串Python在X位置合并字符串,python,string,merge,Python,String,Merge,我正在研究一些ASCII艺术,但我有一个子问题。我想把两个字符串合并在一起创建一个更大的字符串,但我想合并字符串,这样每隔一个字母合并一次,剩下的就留在原来的位置。因此,如果我有字符串“home”和“sweet”,我希望输出是“hsowmeet”;或者一个更长的合并,与我打算做的ASCII艺术一样,^^和&&&&&&将合并到^&^&&&& 我知道我走了,但我开始做这样的事情: def merge(s1, s2): new = s1[1:2] + s2[1:2] + s1[2:2] + s2[
“home”
和“sweet”
,我希望输出是“hsowmeet”
;或者一个更长的合并,与我打算做的ASCII艺术一样,^^
和&&&&&&
将合并到^&^&&&&
我知道我走了,但我开始做这样的事情:
def merge(s1, s2):
new = s1[1:2] + s2[1:2] + s1[2:2] + s2[2:2]
return new
但到目前为止,它看起来很难看,没有达到我想要的效果你可以使用
zip\u
:
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) # '^&^&^&&&&'
您可以对
fillvalue
关键字参数使用itertools.izip_longest
和空字符串,然后按摩返回值,直到它成为您想要的字符串
以下是izip_longest产生的输出(我将结果列成一个列表,以便可读):
现在您只需连接所有字符串(长度为1或0)。一个解决办法是
>>> ''.join(sum(izip_longest(s1, s2, fillvalue=''), ()))
'hsowmeeet'
或者,只需使用常规的for
循环:
>>> result = ''
>>> for x,y in izip_longest(s1, s2, fillvalue=''):
... result += x + y
...
>>> result
'hsowmeeet'
示例:
>>> merge_words('abc', '123456789')
'a1b2c3456789'
>>> merge_words('red', 'rover')
'rreodver'
>>> merge_words('Python', 'merging', 'strings')
'Pmsyettrrhgioinnnggs'
注意:如果使用Python2将
zip_longest
更改为其旧名称izip_longest
,则可以使用itertools
from itertools import izip_longest
def merge(s1, s2):
return ''.join([i+j for i,j in izip_longest(s1, s2, fillvalue='')])
在Python3.x中,它是
zip_longest
,而不是izip_longest
使用sum
或使用重复的+=
构建字符串在创建最终结果之前创建大量中间和更大的对象。对于像这样的小任务来说,这可能没什么大不了的,但值得指出的是,该算法的效率比它需要的要低。
>>> merge_words('abc', '123456789')
'a1b2c3456789'
>>> merge_words('red', 'rover')
'rreodver'
>>> merge_words('Python', 'merging', 'strings')
'Pmsyettrrhgioinnnggs'
from itertools import izip_longest
def merge(s1, s2):
return ''.join([i+j for i,j in izip_longest(s1, s2, fillvalue='')])