【问题标题】:How to remove/delete every n-th element from list?如何从列表中删除/删除每个第 n 个元素?
【发布时间】:2015-10-03 17:42:44
【问题描述】:

我已经看过这篇文章了: Python: building new list from existing by dropping 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-th 项?

【问题讨论】:

  • 答案还可以。从你说的,你假设索引编号从1开始,但系统从0开始计数。

标签: python python-3.x list element


【解决方案1】:

假设你有这个列表:

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]

【讨论】:

  • 这个解决方案让我大吃一惊!哇!
【解决方案2】:

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

print(mylist[::n])

【讨论】:

    【解决方案3】:

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

    在您的第二个函数中,索引从 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、1+n、1+2n、...(似乎是这种情况),您只需调整您的起始索引:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 你的代码没有按照你说的做,而是输出[2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15]
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多