Erb*_*yev 4 python list elements python-3.x
我已经查看了这篇文章: Python:通过删除每个第n个元素从现有构建新列表,但由于某种原因它对我不起作用:
我试过这种方式:
def drop(mylist, n):
del mylist[0::n]
print(mylist)
Run Code Online (Sandbox Code Playgroud)
这个函数有一个列表和n.然后它从列表中使用n步删除每个第n个元素并打印结果.
这是我的函数调用:
drop([1,2,3,4],2)
Run Code Online (Sandbox Code Playgroud)
输出错误:
[2, 4]而不是[1, 3]
然后我尝试了上面链接中的变体:
def drop(mylist, n):
new_list = [item for index, item in enumerate(mylist) if index % n != 0]
print(new_list)
Run Code Online (Sandbox Code Playgroud)
再次,函数调用:
drop([1,2,3,4],2)
Run Code Online (Sandbox Code Playgroud)
给我同样错误的结果:
[2, 4]而不是[1, 3]
如何正确删除/删除/删除列表中的每个第n项?
假设你有这个清单:
a = [1,2,3,4,5,6,7,8,9,10]
如果你想要每个第k个元素,你可以做类似的事情
del a[k-1::k]
Run Code Online (Sandbox Code Playgroud)
k = 3的示例
目前的清单现在 [1, 2, 4, 5, 7, 8, 10]
输出正确,您要删除索引为0,n,2n,...的元素.因此删除了1和3,剩下2和4.所以如果你想打印0,n,2n,...元素,只需写
print(mylist[::n])
Run Code Online (Sandbox Code Playgroud)
在你的第一个函数中,mylist[0::n]is[1, 3]因为0::n意味着第一个元素是 0,其他元素是第一个之后的每 n个元素。正如 Daniel 所建议的,您可以使用mylist[::n]which 表示每n个元素。
在第二个函数中,索引从 0 开始并且0 % 0为 0,因此它不会复制第一个元素。第三个元素也是如此(2 % 2为 0)。所以你需要做的就是new_list = [item for index, item in enumerate(mylist) if (index + 1) % n != 0]
提示:您可能想在此类函数中使用return而不是。print()
| 归档时间: |
|
| 查看次数: |
14501 次 |
| 最近记录: |