繁体   English   中英

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

[英]How to remove/delete every n-th element from list?

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

我试过这种方式:

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

这个函数需要一个列表和n 然后它使用列表中的 n-step 删除每个第 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 个项目?

假设您有列表:

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]

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

print(mylist[::n])

在你的第一个函数中mylist[0::n][1, 3]因为0::n意味着第一个元素是 0 并且其他元素是一个之后的第 n元素。 正如丹尼尔建议你可以使用mylist[::n]这意味着每 n元素。

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

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

你的第一种方法对我来说看起来不错 - 如果你想删除元素 1, 1+n, 1+2n, ...(似乎是这种情况),你只需要调整你的开始索引:

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

另一种方法是生成一个仅包含您需要的元素的新列表。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM