[英]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.