0

假设我有这个字符串:

"""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:]

但后来我不确定如何将它们结合起来......

4

5 回答 5

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))
于 2012-07-23T20:09:29.017 回答
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,你可以内联它)。

于 2012-07-23T20:19:17.590 回答
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将它们重新组合在一起。

于 2012-07-23T20:08:33.397 回答
0

这将使它们井然有序:

string= string.split('\n')
string2= ""
for line in string:
    string2= string2 + line + " "
于 2012-07-23T20:08:38.093 回答
0

假设您有偶数行并且两者s1s2大小相同,您可以将它们组合如下:

lines = [s1[index] + ' ' + s2[index] for index, val in enumerate(s1)]
'\n'.join(lines)

您也可以连接这两个步骤,但为了清楚起见,我将它们分开。

如果您的字符串长度不同,您将需要添加一些条件,它会变得有点混乱。

于 2012-07-23T20:11:54.437 回答