高效且非破坏性地获取不含第k个元素的列表

26 投票
7 回答
22713 浏览
提问于 2025-04-15 18:30

我在Python中有一个列表,我想要遍历这个列表,并选择性地构建一个新列表,这个新列表包含除了当前第k个元素以外的所有元素。我的一种做法是这样的:

l = [('a', 1), ('b', 2), ('c', 3)]
for num, elt in enumerate(l):
  # construct list without current element
  l_without_num = copy.deepcopy(l)
  l_without_num.remove(elt)

但是这样做看起来效率不高,也不太优雅。有没有更简单的方法呢?我想要的是从原始列表中获取一个切片,排除掉当前的元素。感觉应该有更简单的办法来做到这一点。

谢谢你的帮助。

7 个回答

2

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按照预期工作。这种情况可能会让人感到困惑,因为我们可能不太清楚为什么会这样。

通常,这种问题可能是因为我们没有正确地使用这个库,或者是因为库本身有一些限制。解决这类问题的第一步是仔细阅读相关的文档,了解这个库的使用方法和注意事项。

另外,查看其他人的经验和解决方案也是很有帮助的。很多时候,别人遇到过类似的问题,他们的解决办法可能会给我们带来启发。

总之,遇到问题时,不要着急,先冷静下来,查阅资料,看看有没有人分享过解决方案,这样往往能帮助我们更快地找到答案。

l=[('a', 1), ('b', 2), ('c', 3)]
k=1
l_without_num=l[:]   # or list(l) if you prefer
l_without_num.pop(k)
9

如果你能多解释一下你想怎么用它,那就更好了。不过你可以用列表推导式来做到同样的事情。

l = [('a', 1), ('b', 2), ('c', 3)]
k = 1
l_without_num = [elt for num, elt in enumerate(l) if not num == k]

如果你不需要把它存储在l_without_num里,这样迭代会更节省内存。

66
l = [('a', 1), ('b', 2), ('c', 3)]
k = 1
l_without_num = l[:k] + l[(k + 1):]

这就是你想要的吗?

撰写回答