Уведомления

Группа в Telegram: @pythonsu

#1 Март 29, 2014 19:43:33

Zubr
Зарегистрирован: 2013-06-25
Сообщения: 13
Репутация: +  1  -
Профиль   Отправить e-mail  

Удалять каждый N элемент в списке

Есть необходимость удалять, к примеру, каждый 4-й элемент в списке до тех пор, пока len() этого списка не будет равно 1.
Пример.
Есть список
Из него нужно удалять каждый 4-й элемент. После удаления элемента продолжаем отсчитывать дальше 4-ый элемент.
1) - удалили первый элемент
2) - после удаления “4” продолжаем отсчет с элемента “5”.
3) - далее выполняются аналогичные действия
4)
5) - остался один элемент. len(spisok) == 1 и программа завершает работу.
Не знаю, как сделать так, чтобы после удаления элемента продолжать отсчет со следующего элемента, а не с начала списка.

Офлайн

#2 Март 29, 2014 19:53:48

Mouse
Зарегистрирован: 2014-03-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалять каждый N элемент в списке

a=[x for x in range(0,40)]
while len(a)!=1:
	del a[::4]
как то так, не?
del a[::4]
- так удалится каждый 4-й элемент

Отредактировано Mouse (Март 29, 2014 19:58:42)

Офлайн

#3 Март 29, 2014 21:43:04

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Удалять каждый N элемент в списке

>>> 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]
>>>



Отредактировано py.user.next (Апрель 1, 2014 04:48:41)

Офлайн

#4 Март 29, 2014 22:08:58

Zubr
Зарегистрирован: 2013-06-25
Сообщения: 13
Репутация: +  1  -
Профиль   Отправить e-mail  

Удалять каждый N элемент в списке

Спасибо за ответы. Не знал про модуль collections. Буду изучать.

Офлайн

#5 Март 30, 2014 12:21:53

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Удалять каждый N элемент в списке

Есть необходимость удалять, к примеру, каждый 4-й элемент в списке до тех пор, пока len() этого списка не будет равно 1.
Хз, или я вопрос не понял, объясните мне кто-нибудь, как можно достичь len(lst) == 1, удаляя каждый 4й элемент?

Офлайн

#6 Март 30, 2014 14:19:04

Zubr
Зарегистрирован: 2013-06-25
Сообщения: 13
Репутация: +  1  -
Профиль   Отправить e-mail  

Удалять каждый N элемент в списке

dimy44
Ну элементы очереди постоянно будут удаляться и в итоге останется только один элемент. Нужно удалять каждый N элемент по счету, после того, как N элемент удалили - мы переходим к следующему элементу и начинаем отсчет заново и снова перейдем к N элементу по счету.

Офлайн

#7 Март 30, 2014 15:44:22

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Удалять каждый N элемент в списке

ну хорошо, каждый четвертый удаляли-удаляли, осталось три элемента на каком-то этапе. Дальше что?

Офлайн

#8 Март 30, 2014 17:56:07

Zubr
Зарегистрирован: 2013-06-25
Сообщения: 13
Репутация: +  1  -
Профиль   Отправить e-mail  

Удалять каждый N элемент в списке

Элементы удаляются до тех пор, пока не останется один. Вот его мы и ищем.

Офлайн

#9 Март 30, 2014 18:56:08

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Удалять каждый N элемент в списке

Zubr
удаляются до тех пор, пока не останется один

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

[1, 2, 3]



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Отредактировано ajib6ept (Март 30, 2014 18:57:08)

Офлайн

#10 Март 30, 2014 20:57:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Удалять каждый N элемент в списке

dimy44
осталось три элемента на каком-то этапе. Дальше что?
список закольцован



Отредактировано py.user.next (Апрель 1, 2014 04:50:43)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version