Сгруппировать последовательно идущие цифры в списке
Дан список с индексами, необходимо сгруппировать элементы списка, идущие последовательно и вывести номера элементов начала и конца т.е.
indexes=[1,2,3,32,33,35,70]
k=0
i=0
def Popytka_nomer_5(indexes,k,i):
for i in range(len(indexes)-1):
print("Группа",k,'\tНачало',i)
if indexes[i+1]==indexes[i]+1:
continue
k+=1
print("\t\tКонец",i)
Popytka_nomer_5(indexes,k,i)
Выводит это
Группа 0 Начало 0
Группа 0 Начало 1
Группа 0 Начало 2
Конец 2
Группа 1 Начало 3
Группа 1 Начало 4
Конец 4
Группа 2 Начало 5
Конец 5
А нужно
Группа 0 Начало 0
Конец 2
Группа 1 Начало 3
Конец 5
Группа 2 Начало 6
Конец 6
Ответы (2 шт):
Автор решения: Евгений
→ Ссылка
Реализация с циклом по условию (для более удобного перемещения между стартом и концом отрезка):
indexes = [1, 2, 3, 32, 33, 34, 35, 70]
def Popytka_nomer_5(indexes, group = 0, i = 0):
while i < len(indexes):
j = i
while j < len(indexes) -1 \
and indexes[j+1] == indexes[j] + 1:
j += 1
print("Группа {}\tНачало {}".format(group + 1, i))
print("\t\tКонец {}".format(j))
i = j + 1
group += 1
Popytka_nomer_5(indexes)
Реализация с циклом по итератору:
indexes = [1, 2, 3, 32, 33, 34, 35, 70]
def Popytka_nomer_5(indexes, group = 0, i = 0):
g = -1
for i in range(len(indexes)):
if g == -1:
print("Группа {}\tНачало {}".format(group, i))
g = group
if i < len(indexes)-1 and indexes[i+1] == indexes[i] + 1:
continue
group += 1
g = -1
print("\t\tКонец {}".format(i))
Popytka_nomer_5(indexes)
Результат:
Группа 1 Начало 0
Конец 2
Группа 2 Начало 3
Конец 6
Группа 3 Начало 7
Конец 7
В любом случае идти нужно до последнего элемента, а не до предпоследнего. Просто последний сравнивать ни с чем не нужно. А так вы теряли элемент
Автор решения: S. Nick
→ Ссылка
Как вариант:
indexes = [1, 2, 3, 32, 33, 35, 70]
k = 0
i = 0
def popytka_nomer_5(indexes, k, i):
fl = True
for i in range(len(indexes)-1):
if fl: print("Группа", k, '\tНачало', i, indexes[i])
if indexes[i+1] == indexes[i]+1:
fl = False
continue
fl = True
k += 1
print("\t\tКонец ", i, indexes[i])
if not fl:
print("\t\tКонец ", i+1, indexes[i+1])
else:
print("Группа", k, '\tНачало', i+1, indexes[i+1])
print("\t\tКонец ", i+1, indexes[i+1])
popytka_nomer_5(indexes,k,i)
print(indexes)
print(' 0 1 2 3 4 5 6')