如何从列表中删除/删除第n个元素? [英] How to remove/delete every n-th element from list?

查看:78
本文介绍了如何从列表中删除/删除第n个元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I had already looked through this post: Python: building new list from existing by dropping every n-th element, but for some reason it does not work for me:

我尝试过这种方式:

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

此函数需要一个列表和 n .然后,它使用列表中的n步删除每个第n个元素,并打印结果.

This function takes a list and n. Then it removes every n-th element by using n-step from list and prints result.

这是我的函数调用:

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

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

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

Then I tried a variant from the link above:

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]

Gives me the same wrong result: [2, 4] instead of [1, 3]

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

How to correctly remove/delete/drop every n-th item from a list?

推荐答案

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

In your first function mylist[0::n] is [1, 3] because 0::n means first element is 0 and other elements are every nth element after first. As Daniel suggested you could use mylist[::n] which means every nth element.

在第二个函数中索引从0开始,而 0%0 为0,因此它不会复制第一个元素.第三个元素相同( 2%2 为0).因此,您需要做的只是 new_list = [如果索引(1 +%)%n!= 0,则为枚举(mylist)中索引的项目,

In your second function index is starting with 0 and 0 % 0 is 0, so it doesn't copy first element. It's same for third element (2 % 2 is 0). So all you need to do is new_list = [item for index, item in enumerate(mylist) if (index + 1) % n != 0]

提示:在此类函数中,您可能希望使用 return 而不是 print().

Tip: you may want to use return instead of print() in functions like these.

这篇关于如何从列表中删除/删除第n个元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆