0

この文字列があるとしましょう:

"""line1
line2
line3
line4
line5
line6
line7
line8"""

次のように、単一の文字列で表される 2 つの等しいサイズの列に分割する関数を書きたいと思います。

"""line1 line5
line2 line6
line3 line7
line4 line8"""

このように文字列を 2 つに分割できます: 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(不可解なワンライナーが好きな場合は、これをインライン化できます)。

于 2012-07-23T20:19:17.590 に答える
0

偶数の行があり、両方が同じサイズであると仮定するとs1s2次のようにそれらを組み合わせることができます。

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

これらの両方の手順を連結することもできますが、わかりやすくするために分けておきます。

文字列の長さが異なる場合は、いくつかの条件を配置する必要があり、少し面倒になります。

于 2012-07-23T20:11:54.437 に答える
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 に答える