У меня простой вопрос.
У меня есть список или кортеж, и я хочу разбить его на множество списков (или кортежей), содержащих одинаковые элементы.
I ' постараюсь быть более понятным, используя пример:
(1,1,2,2,3,3,4) -> (1,1), (2,2), ( 3,3), (4,) (1,2,3,3,3,3) -> (1,), (2,), (3,3,3,3) [2,2,3,3,2,3] -> [2,2], [3,3], [2], [3]
(1,1,2,2,3,3,4) -> (1,1), (2,2), ( 3,3), (4,)
(1,2,3,3,3,3) -> (1,), (2,), (3,3,3,3)
[2,2,3,3,2,3] -> [2,2], [3,3], [2], [3]
Как я могу сделать? Я знаю, что кортежи и списки не имеют атрибута «split», поэтому я подумал, что мог бы превратить их в строки раньше. Вот что я попробовал:
def splitt(l) x=str(l) for i in range (len(x)-1): if x[i]!=x[i+1]: x.split() return x
Вы можете использовать groupby.
import itertools as it [list(grp) if isinstance(t,list) else tuple(grp) for k, grp in it.groupby(t)]
Примеры:
>>> t = (1,2,3,3,3,3) [(1,), (2,), (3, 3, 3, 3)] >>> t = [2,2,3,3,2,3] [[2, 2], [3, 3], [2], [3]]
Вы также можете попробовать с -l oop:
def group_lt(list_or_tuple): result = [] for x in list_or_tuple: if not result or result[-1][0] != x: result.append(type(list_or_tuple)([x])) else: result[-1] += type(list_or_tuple)([x]) return result t = (1,1,2,2,3,3,4) print(group_lt(t)) # [(1,1),(2,2),(3,3),(4,)] l = [2,2,3,3,2,3] print(group_lt(l)) # [[2,2],[3,3],[2],[3]]
Попробуйте это
from itertools import groupby input_list = [1, 1, 2, 4, 6, 6, 7] output = [list(g) for k, g in groupby(input_list)]