除了Python,我想做this post中的所有事情。考虑两个字符串:
s1='AAA1
AAA2
AAA3'
s2='BBB1
BBB2
BBB3'
我想让combine(s1,s2)
返回:
s3='AAA1BBB1
AAA2BBB2
AAA3BBB3'
您可能会认为这些字符串实际上很长,我希望此过程能够有效执行。如果您能帮助我知道该怎么做,我将不胜感激。
答案 0 :(得分:3)
在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
。
答案 1 :(得分:1)
如果涉及换行符,这可能会满足您的要求:
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)
答案 2 :(得分:1)
同时使用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