Форум сайта python.su
1
Есть необходимость удалять, к примеру, каждый 4-й элемент в списке до тех пор, пока len() этого списка не будет равно 1.
Пример.
Есть список
Из него нужно удалять каждый 4-й элемент. После удаления элемента продолжаем отсчитывать дальше 4-ый элемент.
1) - удалили первый элемент
2) - после удаления “4” продолжаем отсчет с элемента “5”.
3) - далее выполняются аналогичные действия
4)
5) - остался один элемент. len(spisok) == 1 и программа завершает работу.
Не знаю, как сделать так, чтобы после удаления элемента продолжать отсчет со следующего элемента, а не с начала списка.
Офлайн
0
a=[x for x in range(0,40)] while len(a)!=1: del a[::4]
del a[::4]
Отредактировано Mouse (Март 29, 2014 19:58:42)
Офлайн
857
>>> import collections >>> >>> dq = collections.deque(range(1, 21)) >>> >>> i = 0 >>> while len(dq) > 1: ... #dq ... i += 1 ... if i % 4 == 0: ... dq.popleft() ... i = 0 ... else: ... dq.rotate(-1) ... 4 8 12 16 20 5 10 15 1 7 14 2 11 19 13 6 3 9 18 >>> dq deque([17]) >>>
>>> import collections >>> >>> def f(seq, n): ... assert n > 0 ... ... dq = collections.deque(seq) ... ... r = n - 1 ... while len(dq) > 1: ... dq.rotate(-r) ... dq.popleft() ... ... return list(dq) ... >>> f(range(1, 21), 4) [17] >>>
Отредактировано py.user.next (Апрель 1, 2014 04:48:41)
Офлайн
1
Спасибо за ответы. Не знал про модуль collections. Буду изучать.
Офлайн
Есть необходимость удалять, к примеру, каждый 4-й элемент в списке до тех пор, пока len() этого списка не будет равно 1.Хз, или я вопрос не понял, объясните мне кто-нибудь, как можно достичь len(lst) == 1, удаляя каждый 4й элемент?
Офлайн
1
dimy44Ну элементы очереди постоянно будут удаляться и в итоге останется только один элемент. Нужно удалять каждый N элемент по счету, после того, как N элемент удалили - мы переходим к следующему элементу и начинаем отсчет заново и снова перейдем к N элементу по счету.
Офлайн
ну хорошо, каждый четвертый удаляли-удаляли, осталось три элемента на каком-то этапе. Дальше что?
Офлайн
1
Элементы удаляются до тех пор, пока не останется один. Вот его мы и ищем.
Офлайн
26
Zubr
удаляются до тех пор, пока не останется один
[1, 2, 3]
Отредактировано ajib6ept (Март 30, 2014 18:57:08)
Офлайн
857
dimy44список закольцован
осталось три элемента на каком-то этапе. Дальше что?
Отредактировано py.user.next (Апрель 1, 2014 04:50:43)
Офлайн