Python在X位置合并字符串

2024-10-03 23:29:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一些ASCII艺术,但我有一个子问题。我想把两个字符串合并在一起创建一个更大的字符串,但是我想合并字符串,这样每合并一个字母,剩下的就留在原来的位置。因此,如果我有字符串"home""sweet",我希望输出是"hsowmeet";或者更长的合并,我打算做的是ASCII艺术,^^^&&&&&&将合并到^&^&^&&&。你知道吗

我知道我走了,但我开始这样做:

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

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


Tags: 字符串homenewreturndef字母asciimerge
3条回答

可以使用itertools.izip_longestwith和空字符串作为fillvalue关键字参数,然后对返回值进行处理,直到它成为所需的字符串。你知道吗

以下是izip_longest产生的输出(我将结果列成一个列表,以便可读):

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

现在您只需连接所有字符串(长度为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'

您可以使用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) # '^&^&^&&&&'
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'

注意:如果使用python2,请将zip_longest更改为其旧名称izip_longest。你知道吗

相关问题 更多 >