Разделить списки и кортежи в Python - PullRequest
0 голосов
/ 26 января 2020

У меня простой вопрос.

У меня есть список или кортеж, и я хочу разбить его на множество списков (или кортежей), содержащих одинаковые элементы.

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]

Как я могу сделать? Я знаю, что кортежи и списки не имеют атрибута «split», поэтому я подумал, что мог бы превратить их в строки раньше. Вот что я попробовал:

def splitt(l)
    x=str(l)
    for i in range (len(x)-1):
        if x[i]!=x[i+1]:
            x.split()
    return x

Ответы [ 3 ]

1 голос
/ 26 января 2020

Вы можете использовать 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]]
1 голос
/ 27 января 2020

Вы также можете попробовать с -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]]
1 голос
/ 26 января 2020

Попробуйте это

from itertools import groupby

input_list = [1, 1, 2, 4, 6, 6, 7]
output = [list(g) for k, g in groupby(input_list)]
...