Как сделать так, чтобы если в списке стоят 3 одинаковых числа под ряд то они удалялись?

a = [1, 2, 3, 3, 3]
Как сделать так, чтобы если в списке стоят от 3 одинаковых числа под ряд то они удалялись ? И нужно еще записать сколько элементов было удалено. Желательно чтобы метод был без применения pip
  • Вопрос задан
  • 216 просмотров
Решения вопроса 4
Vindicar
@Vindicar
RTFM!
Циклом. Вот только вопрос, а если после удаления снова будут 3 подряд, тоже удалять?
Например,
a = [1, 1, 2, 2, 2, 1]
Должно дать на выходе a = [1, 1, 1] или a = []?

Если первое, то что-то такое...
our_list = [1, 2, 3, 3, 3]
#идём от конца списка к началу - так удаление повлияет только на уже обработанные элементы списка.
for i in range(len(our_list) - 3, 0, -1): 
  if our_list[i:i+3] ==  [ our_list[i] ] * 3: #сравниваем фрагмент списка с повтором элемента трижды
    del our_list[i:i+3]

print(our_list)
Ответ написан
@kokapuk
a = [1, 2, 3, 3, 3, 5, 6, 6, 6]

c = 1
lastOjb = ''
for i in range(len(a)):
    if (lastOjb == a[i]):
        c+=1
    else:
        c = 1
    
    lastOjb = a[i]

    if (c == 3):
        a[i] = ""
        a[i-1] = ""
        a[i-2] = ""

a = list(filter(('').__ne__, a))

print(a)

Вывод: [1, 2, 5]

Способ плохой, скорее всего. Да и никто не помогает, хоть так )
Ответ написан
Комментировать
a = [1,2,3,3,3,4,5,6,6,6,6,6,3,3]

from itertools import groupby    
new_a= []

for _, values in groupby(a):
    values = list(values)
    if len(values) < 3:
        new_a.extend(values)
        
print(new_a)
[1, 2, 4, 5, 3, 3]

есть встроенная функция группировки, но можно посмотреть в её реализацию и сделать самому.
Ответ написан
solotony
@solotony
покоряю пик Балмера
я бы сделал итератор - самый правильный pythonic way

def flt(a):
    deleted = []
    v = None
    n = 0
    for x in a+[None]:
        if not v:
            v = x
            n = 1
            continue
        elif v == x:
            n += 1
            continue
        elif n in [1,2]:
            yield v
            if n == 2:
                yield v
        else:
            deleted.append((v,x))
        v = x
        n = 1
    print(f'deleted={deleted}')


61add295ce71d746134876.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы