注意:我知道 StackOverflow 上可能已经有这个问题的答案,只是我找不到。
我需要这样做:
>>> lst = [1, 2, 3, 4, 5, 6]
>>> first_two = lst.magic_pop(2)
>>> first_two
[1, 2]
>>> lst
[3, 4, 5, 6]
现在
magic_pop
不存在,我用它只是为了展示我需要的示例。有没有像magic_pop
这样的方法可以帮助我以Python方式完成所有事情?
分两步进行。使用切片获取前两个元素,然后从列表中删除该切片。
first_list = lst[:2]
del lst[:2]
如果你想要一个单行代码,你可以将它包装在一个函数中。
def splice(lst, start = 0, end = None):
if end is None:
end = len(lst)
partial = lst[start:end]
del lst[start:end]
return partial
first_list = splice(lst, end = 2)
一种选择是使用切片
def func(lst: list, n: int) -> tuple:
return lst[:n], lst[n:]
lst = [1, 2, 3, 4, 5, 6]
first_two, lst = func(lst, 2)
print(lst)
# [3, 4, 5, 6]
替代方案,这是使用内置函数的 kafkaesque 方法:
def func(lst: list, i: int) -> list:
return list(map(lambda _: lst.pop(0), range(i)))
lst = list(range(10))
first_two = func(lst, 2)
print(first_two)
# [0, 1]
print(lst)
# [2, 3, 4, 5, 6, 7, 8, 9]
尝试:
lst = [1, 2, 3, 4, 5, 6]
first_two, lst = lst[:2], lst[2:]
print(first_two)
print(lst)
打印:
[1, 2]
[3, 4, 5, 6]
您可以创建一个 lambda 函数来执行此操作。
magic_pop = lambda x,y:(x[:y],x[y:]) if y<len(lst) else x
magic_pop(lst,3)
Out[8]: ([1, 2, 3], [4, 5, 6])