获得没有k元素的列表有效且非破坏性

24 python list copying

我在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)
Run Code Online (Sandbox Code Playgroud)

但这似乎效率低下且不够优雅.有一个简单的方法吗?注意我想基本上得到一个排除当前元素的原始列表.似乎应该有一个更简单的方法来做到这一点.

谢谢您的帮助.

Chr*_* B. 61

l = [('a', 1), ('b', 2), ('c', 3)]
k = 1
l_without_num = l[:k] + l[(k + 1):]
Run Code Online (Sandbox Code Playgroud)

这是你想要的吗?

  • +1,绝对是最好的方式!为什么在切片和连接时进行迭代? - ) (2认同)

小智 9

如果你解释了更多你想要如何使用它会有所帮助.但是你可以对列表理解做同样的事情.

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

如果您不必将其存储在l_without_num中,则迭代的内存效率也更高.