你如何合并两个字符串? - Python

时间:2018-04-26 00:17:56

标签: python string

如何完成两个字符串的合并?

例如,您可能希望组合两个多行字符串来制作ASCII艺术。

HEAD = \
"""
  O


"""

BODY = \
r"""

 /|\
 / \
"""

STICKMAN = merge(HEAD, BODY) # this function will return the merged string

STICKMAN将包含这个:

  O
 /|\
 / \

我尝试过STICKMAN = HEAD + BODY。它实际上没有用。

任何答案将不胜感激。谢谢你的帮助!

5 个答案:

答案 0 :(得分:1)

关于示例字符串的难点在于它们的大小不同(stackoverflow markdown使它们出现在我的代码块中同样有问题)。如果用空格填充它们,你可以选择哪个字符不是空格。在不是空间的情况下你必须赞成其中一个

HEAD = """
 O 


"""

BODY = r"""

/|\
/ \
"""

def overlap(s1, s2):
  return ''.join([c2 if c1.isspace() else c1 for c1, c2 in zip(s1, s2)])

print(overlap(HEAD, BODY))

对于您可以复制粘贴并使其正常工作的版本

HEAD = (
' O \n'
'   \n'
'   \n'
)

BODY = (
'   \n'
'/|\\\n'
'/ \\\n'
)

def overlap(s1, s2):
  return ''.join([c2 if c1.isspace() else c1 for c1, c2 in zip(s1, s2)])

print(overlap(HEAD, BODY))

答案 1 :(得分:0)

以下是我如何处理问题*:

  1. 考虑每个多行字符串是字符串列表(可以很容易地转换)

    字符串split功能对此任务很有用。

  2. 对于“HEAD”字符串列表和“BODY”字符串列表中的每一行,选择非空白的[first]行

    一个简单的for循环“迭代每个索引”将在这里工作,并且将是一个很好的实践,就像zip之类的东西一样。像zip这样的函数很方便,因为它们建立配对而不关心索引。

    这将满足问题,尽管可以应用其他“合并”规则:特别是,添加“|”左臂“/”的身体部分需要在字符串中的字符级别应用相同的概念 - 但现在应该很容易实现,使用上面的方法, string实际上是一个字符列表

    (退后一步,人们甚至可以将多行输入视为字符列表,但这要求字符串中有“空格”字符,以使每行的长度相同。)

  3. 转换生成的字符串列表 - 现在包含“HEAD”和“BODY”列表中的一些行 - 返回多行字符串。

    请参阅join,这与split相反。

  4. (*它变得有点太大而不能很好地适应评论,但本身并不意味着“答案”;因此通常在将一些代码/尝试带到表格时效果最佳,因此可以解决具体问题。 。由于没有提出具体要求,只提供了一个 如何开始解决问题的方法。)

答案 2 :(得分:0)

如果所有字符串长度相同,则

"".join(map(max,HEAD,BODY))将起作用。

答案 3 :(得分:0)

由于各个身体部位都有空白,因此只是加入这些部件并不是很有效。

>>> HEAD = \
... """
...   O
... 
... 
... """
>>> 
>>> BODY = \
... r"""
... 
...  /|\
...  / \
... """ 
>>> print(HEAD+BODY)

  O




 /|\
 / \

>>>

一个解决方案很简单:不要在身体部位放置额外的空白行。如果你真的必须这样做,那么你可以让函数重写零件而不需要额外的空行。

>>> def strip_empty(part):
...     lines = part.split('\n')
...     return "\n".join(line for line in lines if line.strip())
... 
>>> stickman = "\n".join(strip_empty(part) for part in parts)
>>> 
>>> print(stickman)
  O
 /|\
 / \
>>> 

答案 4 :(得分:0)

print (HEAD+BODY).replace("\n\n","")

它对我有用。