Wyciąganie podciągu stałego z ciągu liczb

0

Mam taki problem, chciałbym zapisać stały podciąg liczb z podanego ciągu.
Na przykład lista = [2, 4, 4, 4, 4, 3, 1, 6, 6, 6] i chciałbym żeby jako wynik programu otrzymać [ [4, 4, 4, 4], [6, 6, 6] ]. Na razie mam tyle, wywala mi błąd, że wykraczam poza zakres listy.

seq = [2, 4, 5, 5, 6, 8]
sub = []
for i in seq:
    if i < len(seq)+1:
        if seq[i] == seq[i+1]:
            sub.append(seq[i] and seq[i+1])

Proszę o jakieś podpowiedzi.

1

Zakładam, że chodzi o podciągi spójne (nie napisałeś tego, a podany przykład też nie rozstrzyga) Mało eleganckie, ale działa.

L = [2, 4, 4, 4, 4, 3, 1, 6, 6, 6]
result = []
i = 0
first = 0
candidate = []
while i < len(L):
    if i == 0:
        first = L[i]
        candidate = [L[i]]
    else:
        if L[i] == first:
            candidate.append(L[i])
        elif L[i] != first:    
            if len(candidate) > 1:
                result.append(candidate)
            candidate = [L[i]]
            first = L[i]              
    i = i+1
if len(candidate) > 1:
    result.append(candidate)
print(result)
0

Również zakładam, że chodzi o ciągłe podciągi

>>> import itertools as it
>>> a = [2, 4, 4, 4, 4, 3, 1, 6, 6, 6]
>>> filter(lambda x: len(x) > 1, (list(g) for k, g in it.groupby(a)))
[[4, 4, 4, 4], [6, 6, 6]]
0

Na wszelki wypadek, gdyby podciągi nie musiały być spójne.

>>> l = [2, 4, 4, 4, 4, 3, 1, 6, 6, 6, 4]
>>> d = {x:l.count(x) for x in set(l)}
>>> filter(lambda x: len(x) > 1,[d[x]*[x] for x in d.keys()])
[[4, 4, 4, 4, 4], [6, 6, 6]]

1 użytkowników online, w tym zalogowanych: 0, gości: 1