如何一次性执行列表插入和弹出?

ves*_*and 1 python list

像这样的清单

lst1 = [2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

我想轻松地插入一个新的号码1index [0],并在同一时间下降了5,在index [-1]让我结束了:

[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

这可以使用:

lst1.insert(0,1)
lst1.pop()
print(lst1)

# output
# [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

但是我对这样一个事实感到有些困惑,因为似乎不存在直接执行此操作的内置方法。我发现最接近解决方案的是分配1给它自己的列表,然后用这样的索引扩展它lst1

lst0=[1]
lst0.extend(lst1[:-1])

print(lst0)

# output:
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

但不知何故,这感觉有点落后,而且它肯定不是单行的。有没有更pythonic的方法来做到这一点?


对于比我拥有更基础 Python 知识的人来说,这可能是显而易见的,而且它本身甚至不能证明一个问题的合理性。但我对这些事情越来越好奇,想知道这是否可能。如果不是,那为什么呢?

Rak*_*esh 8

使用collections.deque

前任:

import collections

l = collections.deque([2, 3, 4, 5], maxlen=4)    
print(l)
l.appendleft(1)    
print(l)
Run Code Online (Sandbox Code Playgroud)

输出:

deque([2, 3, 4, 5], maxlen=4)
deque([1, 2, 3, 4], maxlen=4)
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 5

这些list方法是就地操作,这意味着它们不返回列表本身,而是返回操作的结果。因此,不存在同时使用基本方法来解决这两个问题的单行解决insert方案pop

您可以定义一个函数并将列表传递给它:

def insert_pop(lst, index, value):
    lst.insert(index, value)
    lst.pop()
    return lst

lst1 = [2, 3, 4, 5]
insert_pop(lst, 0, 1)
# returns:
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

或者您可以使用不同的数据结构,例如collections.deque只允许n内部包含元素的 a 。添加一个新元素会从另一端弹出。