Python基于分隔符单词拆分列表

Cem*_*mre 17 python split list

我有一个包含各种字符串值的列表.每当我看到,我想拆分列表WORD.结果将是一个列表列表(将是原始列表的子列表),其中只包含一个WORD我可以使用循环执行此操作的实例,但是有更多的pythonic方法可以实现此目的吗?

示例= ['A', 'WORD', 'B' , 'C' , 'WORD' , 'D']

结果= [['A'], ['WORD','B','C'],['WORD','D']]

这是我尝试过但它实际上没有达到我想要的,因为它将放入WORD一个应该在的不同列表:

def split_excel_cells(delimiter, cell_data):

    result = []

    temp = []

    for cell in cell_data:
        if cell == delimiter:
            temp.append(cell)
            result.append(temp)
            temp = []
        else:
            temp.append(cell)

    return result
Run Code Online (Sandbox Code Playgroud)

geo*_*org 20

import itertools

lst = ['A', 'WORD', 'B' , 'C' , 'WORD' , 'D']
w = 'WORD'

spl = [list(y) for x, y in itertools.groupby(lst, lambda z: z == w) if not x]
Run Code Online (Sandbox Code Playgroud)

这会创建一个没有分隔符的拆分列表,这对我来说更符合逻辑:

[['A'], ['B', 'C'], ['D']]
Run Code Online (Sandbox Code Playgroud)

如果你坚持要包含分隔符,这应该可以解决问题:

spl = [[]]
for x, y in itertools.groupby(lst, lambda z: z == w):
    if x: spl.append([])
    spl[-1].extend(y)
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 15

我会用一台发电机:

def group(seq, sep):
    g = []
    for el in seq:
        if el == sep:
            yield g
            g = []
        g.append(el)
    yield g

ex = ['A', 'WORD', 'B' , 'C' , 'WORD' , 'D']
result = list(group(ex, 'WORD'))
print(result)
Run Code Online (Sandbox Code Playgroud)

这打印

[['A'], ['WORD', 'B', 'C'], ['WORD', 'D']]
Run Code Online (Sandbox Code Playgroud)

代码接受任何iterable,并生成一个iterable(如果你不想,你不必其压缩成一个列表).

  • 注意,如果你想从结果中排除定界符,你可以在group函数的if语句中添加continue语句。 (2认同)