【问题标题】:Merge multiline strings in python在python中合并多行字符串
【发布时间】:2018-04-21 18:30:14
【问题描述】:

试图弄清楚如何合并包含新行的多个字符串。

所以:

"""line 1 
line 2 
line 3 
line 4"""

+

"""addition 1 
addition 2 
addition 3 
addition 4"""

变成

"""line 1 addition 1
line 2 addition 2
line 3 addition 3
line 4 addition 4"""

但条目不止两个。

任何帮助将不胜感激。

【问题讨论】:

  • 你能发布一些你尝试过的代码吗?

标签: python string concatenation newline


【解决方案1】:

您可以使用list comprehensionjoin 连接字符串:

s1 = """line 1
line 2
line 3
line 4"""

s2 = """addition 1
addition 2 
addition 3 
addition 4"""

result = "\n".join([" ".join(elem) for elem in zip(s1.split("\n"), s2.split("\n"))])
print(result)

输出:

line 1 addition 1
line 2 addition 2 
line 3 addition 3 
line 4 addition 4

【讨论】:

    【解决方案2】:

    您可以在新行上拆分,然后 zip/concat:

    s1 = """line 1 
    line 2 
    line 3 
    line 4"""
    
    s2 = """addition 1 
    addition 2 
    addition 3 
    addition 4"""
    
    print('\n'.join(map(lambda l: l[0] + l[1],zip(s1.split('\n'), s2.split('\n')))))
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      >>> L = '\n'.join(f'line {i}' for i in range(1, 5))
      >>> A = '\n'.join(f'addition {i}' for i in range(1, 5))
      >>> LA = '\n'.join(map(' '.join, zip(*map(str.split, (L, A), ('\n', '\n')))))
      >>> 
      >>> print(LA)
      line 1 addition 1
      line 2 addition 2
      line 3 addition 3
      line 4 addition 4
      

      说明:使用splitjoin,我们可以在换行符(或我们选择的任何字符)处拆分以获得单独的行(作为列表),反之亦然。

      map 是一种将同一函数应用于多个参数的方法。内部map 可能看起来有点轻浮,因为它本质上可以重写L.split('\n'), A.split('\n')。然而,由于 OP 请求比两个更多的条目map 在这里实际上是一个不错的选择

      zip我想大家都知道,这里返回('line 1', 'addition 1'), ('line 2', 'addition 2'), ...

      接下来,我们使用map' '.join 应用于每一对,得到'line 1 addition 1', 'line 2 addition 2', ...

      仍然需要用换行符重新加入它们。

      【讨论】:

      • 日内瓦公约应该禁止向正在努力连接字符串的 OP 投掷这样的武器化单线。你有没有机会让这个怪物变得可读?
      • @Aran-Fey Touche!我会尝试添加一个演练。
      • 感谢您添加解释。我仍然不喜欢代码,但至少现在可以理解了。
      猜你喜欢
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 2019-11-27
      • 2020-01-22
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2019-03-02
      相关资源
      最近更新 更多