Найти - Пользователи
Полная версия: Удалять каждый N элемент в списке
Начало » Python для новичков » Удалять каждый N элемент в списке
1 2
dimy44
Погодите. Давайте сначала. Вот искусственно надуманный, но понятный пример
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]
>>>
Что не так? Или тс не это имел в виду и я неверно понял задачу?
Zubr
ajib6ept
Перефразирую, вот список . Четвертого элемента нет, что удалять?

Удалится первый элемент.
Zubr
Вот рабочий вариант:

#!/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)
py.user.next
добавил вариант покороче
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