Уведомления

Группа в Telegram: @pythonsu

#1 Март 30, 2014 22:43:44

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

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

Погодите. Давайте сначала. Вот искусственно надуманный, но понятный пример

lst = range(1, 10) # список на входе.
step_del = 4 # шаг, ч/з который удалять элементы списка.
while 1:
    """
    зафиксируем состояние списка на входе:
    """
    lst_copy = lst[:]
    """
    пройдемся по последовательности от step_del-1 (4-й элемент, индекс 3)
    с шагом step_del-1 (шаг сокращаем на 1,
    т.к. с каждым удалением элемента из списка
    индекс следующего удаляемого элемента
    уменьшается на 1):
    """
    for i in xrange(step_del-1, len(lst), step_del-1):
        del lst[i:i+1] # удаляем
    """
    если состояние списка на входе и
    списка после for идентичны, то
    значит больше ничего не удаляется
    и надо завершать цикл while:
    """
    if lst == lst_copy:
        break
    print lst
>>>
[1, 2, 3, 5, 6, 7, 9]
[1, 2, 3, 6, 7, 9]
[1, 2, 3, 7, 9]
[1, 2, 3, 9]
[1, 2, 3]
>>>
Что не так? Или тс не это имел в виду и я неверно понял задачу?

Офлайн

#2 Март 30, 2014 23:37:26

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

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

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

Удалится первый элемент.

Офлайн

#3 Март 30, 2014 23:41:23

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

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

Вот рабочий вариант:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import collections
N = int(input("Размер списка: "))
P = int(input("Какой элемент удалять: "))
def create_collection(count):
    global dq
    dq = collections.deque(range(1, count+1))
    return dq
def delete_from_collection(to, count):
    create_collection(count)
    print(dq)
    i = 0
    while len(dq) > 1:
        i += 1
        #print(i)
        if i % to == 0:
            dq.popleft()
            i = 0
        else:
            dq.rotate(-1)
    print(dq)
    return dq
delete_from_collection(P, N)

Офлайн

#4 Апрель 1, 2014 04:50:58

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

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

добавил вариант покороче



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version