假设我有这个字符串:
"""line1
line2
line3
line4
line5
line6
line7
line8"""
我想编写一个函数将其拆分为由单个字符串表示的两个大小相等的列,如下所示:
"""line1 line5
line2 line6
line3 line7
line4 line8"""
我可以将字符串拆分为两个,如下所示: s1,s2 = s [:len(s)// 2],s [len(s)// 2:]
但后来我不确定如何将它们结合起来......
答案 0 :(得分:3)
s='''line1
line2
line3
line4
line5
line6
line7
line8'''
lines=s.split()
halflen = len(lines)/2
columns = '\n'.join(' '.join((lines[x],lines[x+halflen])) for x in range(halflen))
答案 1 :(得分:2)
如果先拆分成线,会更容易。
lines = s.splitlines()
s1, s2 = lines[:len(lines) // 2], lines[len(lines)//2:]
"\n".join(map(" ".join, zip(s1, s2)))
这适用于偶数行。如果行数为奇数,请使用itertools.izip_longest
代替zip
和
def join(s1, s2):
return s1 if s2 is None else " ".join((s1, s2))
而不是" ".join
(如果你喜欢神秘的oneliners,你可以内联这个。)
答案 2 :(得分:0)
拿走你所拥有的,然后:
>>> s ="""line1
line2
line3
line4
line5
line6
line7
line8"""
>>> s1, s2 = s[:len(s)//2], s[len(s)//2:]
>>> '\n'.join([' '.join(x) for x in zip(s1.split('\n'),s2[1:].split('\n'))])
'line1 line5\nline2 line6\nline3 line7\nline4 line8'
令人讨厌的单行,但这是基本前提,只需使用zip
将序列项配对,然后你就可以join
将它们重新组合在一起。
答案 3 :(得分:0)
这会使它们按顺序排列:
string= string.split('\n')
string2= ""
for line in string:
string2= string2 + line + " "
答案 4 :(得分:0)
假设您有一个偶数行并且s1
和s2
的大小相同,您可以将它们组合如下:
lines = [s1[index] + ' ' + s2[index] for index, val in enumerate(s1)]
'\n'.join(lines)
您也可以连接这两个步骤,但为了清楚起见,我将它们分开。
如果你的琴弦长度不同,你需要加上一些条件,它会变得有点混乱。