我已经看过这篇文章:[Python:通过删除每个第n个元素从现有列表构建新列表,但是由于某些原因,它对我不起作用:
我这样尝试:
def drop(mylist, n): del mylist[0::n] print(mylist)
此函数需要一个列表和n。然后,它使用列表中的n步删除第n个元素,并打印结果。
n
这是我的函数调用:
drop([1,2,3,4],2)
错误的输出: [2, 4]代替[1, 3]
[2, 4]
[1, 3]
然后我从上面的链接尝试了一个变体:
def drop(mylist, n): new_list = [item for index, item in enumerate(mylist) if index % n != 0] print(new_list)
再次,函数调用:
给了我同样的错误的结果: [2, 4]不是[1, 3]
如何正确地从列表中删除/删除/删除 第n个 项目?
在您的第一个函数中mylist[0::n]是[1, 3]因为0::n意味着第一个元素为0,其他元素在 第 一个之后的第n 个 元素中。正如Daniel所建议的,您可以使用mylist[::n]n 个 元素。
mylist[0::n]
0::n
mylist[::n]
在您的第二个函数中,索引从0开始且0 % 0为0,因此它不会复制第一个元素。第三个元素(2 % 2为0)相同。所以你要做的就是new_list = [item for index, item in enumerate(mylist) if (index + 1) % n != 0]
0 % 0
2 % 2
new_list = [item for index, item in enumerate(mylist) if (index + 1) % n != 0]
提示:您可能希望在此类函数中使用return而不是print()。
return
print()