像这样的清单
lst1 = [2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
我想轻松地插入一个新的号码1在index [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 知识的人来说,这可能是显而易见的,而且它本身甚至不能证明一个问题的合理性。但我对这些事情越来越好奇,想知道这是否可能。如果不是,那为什么呢?
前任:
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)
这些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 。添加一个新元素会从另一端弹出。
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |