Python:如何从列表中删除/删除每个第n个元素?

时间:2015-10-03 17:42:45

标签: python list python-3.x elements

我已经浏览了这篇文章: Python: building new list from existing by dropping every n-th element,但由于某种原因,它对我不起作用:

我试过这种方式:

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]

如何从列表中正确删除/删除/删除每个第n个项?

5 个答案:

答案 0 :(得分:7)

假设您有列表:

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

如果您想要每个第k个元素,您可以执行类似

的操作
del a[k-1::k]

k = 3

的例子

目前的清单现在是[1, 2, 4, 5, 7, 8, 10]

答案 1 :(得分:5)

输出正确,您要删除索引为0,n,2n,...的元素。因此删除了1和3,剩下2和4。因此,如果要打印0,n,2n,...元素,只需写入

print(mylist[::n])

答案 2 :(得分:2)

你的第一种方法看起来对我很好 - 你只需要调整你的起始索引,如果你想放弃元素1,1 + n,1 + 2n,......(似乎就是这种情况):

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

答案 3 :(得分:2)

在您的第一个函数中mylist[0::n][1, 3],因为0::n表示第一个元素为0,其他元素在第一个元素之后是每个 th 元素。正如Daniel建议您可以使用mylist[::n],这意味着每个 元素。

在你的第二个函数索引中,从0开始,0 % 0为0,因此它不会复制第一个元素。对于第三个元素(2 % 2为0)也是如此。所以你需要做的只是new_list = [item for index, item in enumerate(mylist) if (index + 1) % n != 0]

提示:您可能希望在这些功能中使用return而不是print()

答案 4 :(得分:1)

另一种方法是生成一个只包含所需元素的新列表。

newList = [x for i, x in enumerate(myList) if i%n !=0]

如果n为5,则会返回包含元素[1,2,3,4,6,7,8,9,11 ...]的列表 这样做的好处是,如果要重用数据,保留原始列表是有用的。但是,如果你担心节省内存,那么可能不是最好的。