Разбиение строки/списка по лямбде
Как можно разделить строку/список, используя лямбду?
Например:
1. у меня есть строка 123-456-789, для нее я определяю функцию lambda x: x == '-' и получаю [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
2. у меня есть список ['123', '-', '456', '-', '789'], для него я определяю функцию lambda x: x == '-' и получаю [['123'], ['456'], ['789']]
3. у меня есть список слов ['Сообщество', 'здесь', ',', 'чтобы', 'помочь', 'вам', 'с', 'конкретными', 'проблемами', 'по', 'программированию', ',', 'алгоритмам', ',', 'языкам', 'программирования', '.'] и я хочу удалить пунктуацию, поэтому задаю lambda x: x in ',.', результат:
[['Сообщество', 'здесь'], ['чтобы', 'помочь', 'вам', 'с', 'конкретными', 'проблемами', 'по', 'программированию'], ['алгоритмам'], ['языкам', 'программирования']]
Пример без реализации:
items = '123-456-789'
parts = split_by_func(items, lambda x: x == '-')
print(parts)
# [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']
Ответы (1 шт):
Пример реализации через itertools.groupby:
from itertools import groupby
from typing import Iterable, Callable, List
def split_by_func(items: Iterable, func: Callable) -> List[List]:
return [list(x[1]) for x in groupby(items, func) if not x[0]]
Тест:
tokens = [
'Сообщество', 'здесь', ',', 'чтобы', 'помочь', 'вам', 'с', 'конкретными', 'проблемами',
'по', 'программированию', ',', 'алгоритмам', ',', 'языкам', 'программирования', '.'
]
parts = split_by_func(tokens, lambda x: x in ',.')
print(parts)
# [['Сообщество', 'здесь'], ['чтобы', 'помочь', 'вам', 'с', 'конкретными',
# 'проблемами', 'по', 'программированию'], ['алгоритмам'], ['языкам', 'программирования']]