Zubr
Март 29, 2014 19:43:33
Есть необходимость удалять, к примеру, каждый 4-й элемент в списке до тех пор, пока len() этого списка не будет равно 1.
Пример.
Есть список
Из него нужно удалять каждый 4-й элемент. После удаления элемента продолжаем отсчитывать дальше 4-ый элемент.
1) - удалили первый элемент
2) - после удаления “4” продолжаем отсчет с элемента “5”.
3) - далее выполняются аналогичные действия
4)
5) - остался один элемент. len(spisok) == 1 и программа завершает работу.
Не знаю, как сделать так, чтобы после удаления элемента продолжать отсчет со следующего элемента, а не с начала списка.
Mouse
Март 29, 2014 19:53:48
a=[x for x in range(0,40)]
while len(a)!=1:
del a[::4]
как то так, не?
- так удалится каждый 4-й элемент
py.user.next
Март 29, 2014 21:43:04
>>> 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])
>>>
add
вариант покороче
>>> 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]
>>>
Zubr
Март 29, 2014 22:08:58
Спасибо за ответы. Не знал про модуль collections. Буду изучать.
dimy44
Март 30, 2014 12:21:53
Есть необходимость удалять, к примеру, каждый 4-й элемент в списке до тех пор, пока len() этого списка не будет равно 1.
Хз, или я вопрос не понял, объясните мне кто-нибудь, как можно достичь len(lst) == 1, удаляя каждый 4й элемент?
Zubr
Март 30, 2014 14:19:04
dimy44
Ну элементы очереди постоянно будут удаляться и в итоге останется только один элемент. Нужно удалять каждый N элемент по счету, после того, как N элемент удалили - мы переходим к следующему элементу и начинаем отсчет заново и снова перейдем к N элементу по счету.
dimy44
Март 30, 2014 15:44:22
ну хорошо, каждый четвертый удаляли-удаляли, осталось три элемента на каком-то этапе. Дальше что?
Zubr
Март 30, 2014 17:56:07
Элементы удаляются до тех пор, пока не останется один. Вот его мы и ищем.
ajib6ept
Март 30, 2014 18:56:08
Zubr
удаляются до тех пор, пока не останется один
Перефразирую, вот список . Четвертого элемента нет, что удалять?
py.user.next
Март 30, 2014 20:57:08
dimy44
осталось три элемента на каком-то этапе. Дальше что?
список закольцован