Python разделение списка на основе слова разделителя

Вот более простой ответ, который сработал для меня.

Во-первых, за комментарий Python Dev выше, setuptools не требуется:

package_data is also available to pure distutils setup scripts 
since 2.3. – Éric Araujo

Это здорово, потому что установка требования setuptools на ваш пакет означает, что вам также придется его установить. Короче:

from distutils.core import setup

setup(
    # ...snip...
    packages          = ['pkgname'],
    package_data      = {'pkgname': ['license.txt']},
)
17
задан Cœur 16 November 2018 в 04:54
поделиться

2 ответа

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]

это создает разделенный список без разделителей, что выглядит более логичным для меня:

[['A'], ['B', 'C'], ['D']]

Если вы настаиваете на включении разделителей, это должно сработать:

spl = [[]]
for x, y in itertools.groupby(lst, lambda z: z == w):
    if x: spl.append([])
    spl[-1].extend(y)
19
ответ дан Drake Guan 16 November 2018 в 04:54
поделиться

Учитывая

import more_itertools as mit


iterable = ["A", "WORD", "B" , "C" , "WORD" , "D"]
pred = lambda x: x == "WORD"

Код

list(mit.split_before(iterable, pred))
# [['A'], ['WORD', 'B', 'C'], ['WORD', 'D']]

more_itertools является сторонней библиотекой устанавливается через > pip install more_itertools.

См. Также split_at и split_after .

0
ответ дан pylang 16 November 2018 в 04:54
поделиться