Найти - Пользователи
Полная версия: Удалять каждый N элемент в списке
Начало » Python для новичков » Удалять каждый N элемент в списке
1 2
Zubr
Есть необходимость удалять, к примеру, каждый 4-й элемент в списке до тех пор, пока len() этого списка не будет равно 1.
Пример.
Есть список
Из него нужно удалять каждый 4-й элемент. После удаления элемента продолжаем отсчитывать дальше 4-ый элемент.
1) - удалили первый элемент
2) - после удаления “4” продолжаем отсчет с элемента “5”.
3) - далее выполняются аналогичные действия
4)
5) - остался один элемент. len(spisok) == 1 и программа завершает работу.
Не знаю, как сделать так, чтобы после удаления элемента продолжать отсчет со следующего элемента, а не с начала списка.
Mouse
a=[x for x in range(0,40)]
while len(a)!=1:
	del a[::4]
как то так, не?
del a[::4]
- так удалится каждый 4-й элемент
py.user.next
>>> 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
Спасибо за ответы. Не знал про модуль collections. Буду изучать.
dimy44
Есть необходимость удалять, к примеру, каждый 4-й элемент в списке до тех пор, пока len() этого списка не будет равно 1.
Хз, или я вопрос не понял, объясните мне кто-нибудь, как можно достичь len(lst) == 1, удаляя каждый 4й элемент?
Zubr
dimy44
Ну элементы очереди постоянно будут удаляться и в итоге останется только один элемент. Нужно удалять каждый N элемент по счету, после того, как N элемент удалили - мы переходим к следующему элементу и начинаем отсчет заново и снова перейдем к N элементу по счету.
dimy44
ну хорошо, каждый четвертый удаляли-удаляли, осталось три элемента на каком-то этапе. Дальше что?
Zubr
Элементы удаляются до тех пор, пока не останется один. Вот его мы и ищем.
ajib6ept
Zubr
удаляются до тех пор, пока не останется один

Перефразирую, вот список . Четвертого элемента нет, что удалять?

[1, 2, 3]
py.user.next
dimy44
осталось три элемента на каком-то этапе. Дальше что?
список закольцован
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB