0

次のような文字列があるとします。

st='''Line 1
Line 2
Line 3
Line 4

Line 5
Line 6

Line 7
Line 8 
Line 9

Line 10
Line 11
Line 12
Line 13
Line 14'''
# may be really big...

ここで、空白行でグループ化された LoL が必要だとします。

[['Line 1', 'Line 2', 'Line 3', 'Line 4'],
 ['Line 5', 'Line 6'],
 ['Line 7', 'Line 8 ', 'Line 9'],
 ['Line 10', 'Line 11', 'Line 12', 'Line 13', 'Line 14']]

私は、正規表現分割でその LoL を作成できることを知っています。

[[x] for x in re.split(r'^\s*\n',st,flags=re.MULTILINE)]

ただし、正規表現以外の Python ジェネレーターを使用してこれを作成しようとしています。私が得た最も近いものは、この恐ろしいことです(これには空白が含まれており、私が知っていることはまったく効率的ではありません...):

result=[]        
for sub in (group for key, group in itertools.groupby(st.splitlines(), lambda x: not x.rstrip())):
    result.append(list(sub))

print result

進むべき方向についてのヒントはありますか?

私はこのSOの質問をやや抑えています。

4

2 に答える 2

2

これがうまくいかない理由はありますか?

>>> lol = [group.split("\n") for group in st.split("\n\n")]
>>> pprint(lol)
[['Line 1', 'Line 2', 'Line 3', 'Line 4'],
 ['Line 5', 'Line 6'],
 ['Line 7', 'Line 8 ', 'Line 9'],
 ['Line 10', 'Line 11', 'Line 12', 'Line 13', 'Line 14']]
于 2013-02-12T23:20:30.383 に答える