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

Erb*_*yev 4 python list elements python-3.x

我已经查看了这篇文章: Python:通过删除每个第n个元素从现有构建新列表,但由于某种原因它对我不起作用:

我试过这种方式:

def drop(mylist, n):
    del mylist[0::n]
    print(mylist)
Run Code Online (Sandbox Code Playgroud)

这个函数有一个列表和n.然后它从列表中使用n步删除每个第n个元素并打印结果.

这是我的函数调用:

drop([1,2,3,4],2)
Run Code Online (Sandbox Code Playgroud)

输出错误:
[2, 4]而不是[1, 3]


然后我尝试了上面链接中的变体:

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

再次,函数调用:

drop([1,2,3,4],2)
Run Code Online (Sandbox Code Playgroud)

给我同样错误的结果: [2, 4]而不是[1, 3]


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

non*_*ono 7

假设你有这个清单:

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

如果你想要每个第k个元素,你可以做类似的事情

del a[k-1::k]
Run Code Online (Sandbox Code Playgroud)

k = 3的示例

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


Dan*_*iel 6

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

print(mylist[::n])
Run Code Online (Sandbox Code Playgroud)


kno*_*dge 4

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

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

提示:您可能想在此类函数中使用return而不是。print()