我有一个这样的列表:[1, 3, 4, 5, 1]
我想删除第一个n
元素,因此对于n = 3
,我想返回该列表,同时将其从原始列表中删除。所以我有[1,3,4]
我的原始列表现在是[5, 1]
。
在python中执行此操作的最佳方法是什么?
答案 0 :(得分:4)
在Python 2.7中,这将如下所示。只需提取部分列表并删除原始版本中不需要的部分。
lst = [1, 3, 4, 5, 1]
new_lst = lst[:3]
del lst[:3]
print lst
print new_lst
答案 1 :(得分:2)
如果要改变原始对象,可以使用[:]
进行更改。例如:
>>> x = ['a','b','c','d','e']
>>> x[:], removed = x[3:], x[:3]
>>> x
['d', 'e']
>>> removed
['a', 'b', 'c']
这是有效的,因为右侧的术语x[3:]
和x[:3]
都会在分配到左侧的目标(x[:]
和{{1}之前进行评估}})。
答案 2 :(得分:1)
这样的东西?
def pop_n(lst, n):
"""
Deletes the first *n* elements from *lst* and returns them.
"""
# validate inputs
# might want to use something other than isinstance()
if not isinstance(n, int) or n < 0:
raise ValueError("n must be a non-negative integer, not {}"
.format(n))
# store the elements to return
ret = lst[:n]
# remove the elements from the original list
del lst[:n]
return ret
编辑:这是一个示例案例演示。
>>> x = [1, 3, 4, 5, 1]
>>> pop_n(x, 3)
[1, 3, 4]
>>> x
[5, 1]
答案 3 :(得分:0)
>>> original = [1, 3, 4, 5, 1]
>>> removed, original[:3] = original[:3], ()
>>> removed, original
([1, 3, 4], [5, 1])