2015-10-03 2 views
3

я уже просматривал этот пост: Python: building new list from existing by dropping every n-th element, но по какой-то причине не работает для меня:Python: как удалить/удалить каждый n-й элемент из списка?

Я попробовал этот путь:

def drop(mylist, n): 
    del mylist[0::n] 
    print(mylist) 

Эта функция принимает список и n. Затем он удаляет каждый n-й элемент, используя n-шаг из списка и результат печати.

Вот мой вызов функции:

drop([1,2,3,4],2) 

Неправильный выход:
[2, 4] вместо [1, 3]


Затем я попробовал вариант по ссылке выше:

def drop(mylist, n): 
    new_list = [item for index, item in enumerate(mylist) if index % n != 0] 
    print(new_list) 

Опять же, функция звоните:

drop([1,2,3,4],2) 

дает мне тот же неправильный результат: [2, 4] вместо [1, 3]


Как правильно удалить/удалить/падение каждого п-й элемента из списка?

+1

Ответы O K. Из того, что вы говорите, вы предполагаете, что нумерация индекса начинается с 1, но система начинает отсчет с 0. – naitoon

ответ

2

в вашей первой функции mylist[0::n] является [1, 3], потому что 0::n означает первый элемент 0 и другие элементы любого п th элемент после первого. Как предложил Дэниел, вы можете использовать mylist[::n], что означает каждый n th элемент.

В вашей второй функции индекс начинается с 0 и 0 % 0 равно 0, поэтому он не копирует первый элемент. То же самое для третьего элемента (2 % 2 равно 0). Так что все, что вам нужно сделать, это new_list = [item for index, item in enumerate(mylist) if (index + 1) % n != 0]

Совет: вы можете использовать return вместо print() в таких функциях.

4

Выход правильный, вы удаляете элементы с индексом 0, n, 2n, .... Таким образом, 1 и 3 удалены, 2 и 4 остаются. Так что если вы хотите напечатать элемент 0, п, 2п, ..., просто написать

print(mylist[::n]) 
2

ваш первый подход выглядит хорошо для меня - вы просто должны адаптировать свой начальный индекс, если вы хотите отказаться от элементов 1, 1 + п, 1 + 2n, ... (как кажется, так):

lst = list(range(1, 5)) 
del lst[1::2] 
print(lst) 
3

Допустим, у вас есть список:

a = [1,2,3,4,5,6,7,8,9,10]

Если вы хотите каждый к-й элемент, который вы можете сделать что-то вроде

del a[k-1::k] 

Пример с к = 3

The текущий список сейчас [1, 2, 4, 5, 7, 8, 10]

Смежные вопросы