1

リストがあります:

lists = (['1','2','3','S','3','4','S','4','6','7'])

そして、「S」が表示されるたびにリストを小さなリストに分割し、「S」を次のように削除します。

([['1','2','3'],['3','4],['4','6','7']])

私のコード:

def x (lists):
    empty = ''
    list = []

    for x in lists:
        if x == empty:
            list[-1:].append(x)
        else:
            list.append([x])

    return (list)

私はこのようなことを試しましたが、私はPythonにまったく慣れていないので、どこにも行きません。私が持っているものをどのように修正しますか?

4

3 に答える 3

5

試してみてくださいitertools.groupby()

>>> from itertools import groupby
>>> lists = ['1','2','3','S','3','4','S','4','6','7']
>>> [list(g[1]) for g in groupby(lists, lambda i:i!='S') if g[0]]
[['1', '2', '3'], ['3', '4'], ['4', '6', '7']]
于 2012-11-16T05:43:52.727 に答える
1

多分何かのようなmap(list,''.join(lists).split('S'))

または、[list(s) for s in ''.join(lists).split('S'))

于 2012-11-16T05:41:14.173 に答える
1

まあ、面白いかもしれませんが、これはうまくいくはずです:

[s.split('#') for s in '#'.join(lists).split('#S#')]

に出現する可能性が低い場合は、任意の文字の代わりに'#'使用できますlists

于 2012-11-16T05:50:22.413 に答える