python 获取列表的前 x 个元素并删除它们

问题描述 投票:0回答:4

注意:我知道 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方式完成所有事情?

python list
4个回答
5
投票

分两步进行。使用切片获取前两个元素,然后从列表中删除该切片。

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)

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]

1
投票

尝试:

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]

1
投票

您可以创建一个 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])
© www.soinside.com 2019 - 2024. All rights reserved.