Python 弹出一维数组的最后一个元素
说到Python 弹出一维数组的最后一个元素,python,arrays,list,numpy,Python,Arrays,List,Numpy,说到列表s,我们都知道并喜欢good oldpop,它从列表中删除最后一项并返回: >>> x = range(3) >>> last_element = x.pop() >>> last_element 2 >>> x [0, 1] 但是假设我使用一个一维的numpyarray来保存我的项目,因为我做了很多元素计算。那么,对于我来说,实现pop的最有效方法是什么 我当然可以 >>> import num
列表
s,我们都知道并喜欢good oldpop
,它从列表中删除最后一项并返回:
>>> x = range(3)
>>> last_element = x.pop()
>>> last_element
2
>>> x
[0, 1]
但是假设我使用一个一维的numpy
array
来保存我的项目,因为我做了很多元素计算。那么,对于我来说,实现pop
的最有效方法是什么
我当然可以
>>> import numpy as np
>>> x = np.arange(3)
>>> last_element = x[-1]
>>> x = np.delete(x, -1) # Or x = x[:-1]
>>> last_element
2
>>> x
array([0, 1])
事实上,说到底,这很好。但是,对于我丢失的数组,是否有一行程序删除最后一项并同时返回它
我不是在要求
>>> last_element, x = x[-1], x[:-1]
我不把它算作一行程序,因为它是由两个不同的操作完成的两个不同的任务。句法上的糖分是把一切放在一条线上的东西。这是一个甜蜜的方式来做我已经做了以上。(哈,我确信有人会急忙给出这个答案,事实上,有人已经给出了。这个答案相当于我问:“到商店去比走路更快的方法是什么?”有人回答:“走路,但是走得更快。”呃……谢谢。我已经知道怎么走路了。)numpy没有这样一句话(除非您自己编写)。
numpy
用于处理固定大小的对象(或更改频率较低的对象)。因此,根据该指标,常规的旧式python
列表更适合弹出
您的观点是正确的,即使用numpy
可以更好地执行元素操作。您必须分析代码,看看哪一个性能更好,然后做出设计决策。对于numpy
(除非您自己编写)。numpy
用于固定大小的对象(或更改频率较低的对象)。因此,根据该指标,常规的旧式python
列表更适合弹出
您的观点是正确的,即使用numpy
可以更好地执行元素操作。您必须分析代码,看看哪一个性能更好,然后做出设计决策。对于numpy
(除非您自己编写)。numpy
用于固定大小的对象(或更改频率较低的对象)。因此,根据该指标,常规的旧式python
列表更适合弹出
您的观点是正确的,即使用numpy
可以更好地执行元素操作。您必须分析代码,看看哪一个性能更好,然后做出设计决策。对于numpy
(除非您自己编写)。numpy
用于固定大小的对象(或更改频率较低的对象)。因此,根据该指标,常规的旧式python
列表更适合弹出
您的回答是正确的,即使用numpy
可以更好地执行元素操作。您必须分析您的代码,看看哪个性能更好,然后做出设计决策。答案很好,但您的推理是“numpy
适用于固定大小的对象”这里不起作用。numpy
包括数组的delete
和insert
函数——这些函数可以更改数组的大小——那么为什么不pop
?它的编写允许更改其对象(通过delete
和insert
)但是,numpy
并没有很好地优化以不断更改数组的大小。例如,python列表会做得更好。当我说“固定大小的对象”时我指的是在内存分配中不经常更改的对象。例如,矩阵或数组的大小不经常更改,但您可能希望对其或iti执行许多操作。我同意,但这并不能解释缺少pop
pop
并不意味着“不断更改”数组的作用比delete
或insert
更大。不,但是delete
和insert
更一般,它们允许您以多种不同的方式更改对象。numpy
的作者在python的“只有一种方法”概念中(我假设)考虑到numpy
对象可能很少使用pop
,我认为没有足够的必要使用它。最终我无法完美地解释为什么它不存在于numpy
中,我没有写它,我只能查看delete
和insert
的代码。这两个都是Python 4+屏幕长的。它们所做的工作与您试图避免的工作完全相同。它们不会更改数组的大小。它们使用索引和/或连接生成新数组。回答得很好,但您的推理是“numpy
用于固定大小的对象”这里不起作用。numpy
包括数组的delete
和insert
函数——这些函数可以更改数组的大小——那么为什么不pop
?它的编写允许更改其对象(通过delete
和insert
)但是,numpy
并没有很好地优化以不断更改数组的大小。例如,python列表会做得更好。当我说“固定大小的对象”时我指的是在内存分配中不经常更改的对象。例如,矩阵或数组的大小不经常更改,但您可能希望对其或iti执行许多操作。我同意,但这并不能解释缺少pop
pop
并不意味着“不断更改”数组的作用比delete
或insert
更大。不,但是delete
和insert
更一般,它们允许您以多种不同的方式更改对象。numpy
的作者在python的“只有一种方法”概念中(我假设)决定不需要足够的pop