繁体   English   中英

在Python中交织两个多行字符串

[英]Interleave two multiline strings in Python

除了Python,我想做的就是这篇文章 考虑两个字符串:

s1='AAA1
    AAA2
    AAA3'
s2='BBB1
    BBB2
    BBB3'

我想让combine(s1,s2)返回:

s3='AAA1BBB1
    AAA2BBB2
    AAA3BBB3'

您可能会认为这些字符串实际上很长,并且我希望此过程能够有效执行。 如果您能帮助我知道该怎么做,我将不胜感激。

多行字符串在Python中用'''表示。

>>> s1 = '''AAA1
...:AAA2
...:AAA3'''
>>> 
>>> s2 = '''BBB1
...:BBB2
...:BBB3'''

您可以使用str.splitlines拆分它们,并使用zip交错它们。

>>> strings = [s1, s2]
>>> pairs = zip(*(s.splitlines() for s in strings))
>>> result = '\n'.join(''.join(pair) for pair in pairs)
>>> 
>>> print(result)
AAA1BBB1
AAA2BBB2
AAA3BBB3

使用*args语法接受任意数量的多行字符串的通用函数可以编写如下。

>>> def combine(*strings):
...:    lines = zip(*(s.splitlines() for s in strings))
...:    return '\n'.join(''.join(line) for line in lines)
>>> 
>>> str1 = '''A
...:D
...:H'''
>>> str2 = '''B
...:E
...:I'''
>>> str3 = '''C
...:F
...:J'''
>>> 
>>> print(combine(str1, str2, str3))
ABC
DEF
HIJ

请注意, zip将其产生的可迭代项截断为最短参数的长度,即,结果的行数与传递给combine的最短多行字符串的行数相同。

如果您期望使用不同行数的字符串并且需要填充值,则可以使用itertools模块中的zip_longest

如果涉及换行符,这可能会满足您的期望:

s1="AAA1\nAAA2\nAAA3"
s2="BBB1\nBBB2\nBBB3"

ms1 = s1.splitlines()
ms2 = s2.splitlines()

new_list = []

i = 0
while i < 3:
  new_list.append( ms1[i]+ms2[i] )
  i = i + 1

print(new_list)

使用splitlines() ,然后将两个列表zip在一起

s1="AAA1\nAAA2\nAAA3"
s2="BBB1\nBBB2\nBBB3"

l1 = s1.splitlines()
l2 = s2.splitlines()

print('\n'.join([i+j for i,j in zip(l1,l2)]))

产量

AAA1BBB1
AAA2BBB2
AAA3BBB3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM