在python中,如何将列表中的最后一项移到前面?

在python中,如何将列表中的最后一项移到前面?,python,list,Python,List,我仔细搜索了一下,但找不到任何与这个确切的细节有关的东西。我有一份清单: a = [two, three, one] 我想把one移到前面,这样它就变成: a = [one, two, three] 问题是,它可以是列表中任意数量的数字。假设无法知道是50项还是3项。索引与最后一项相关 a = a[-1:] + a[:-1] 这将适用于列表中任意数量的元素。您可以使用以下代码: a.insert(0, a.pop()) 基本上: a.insert(0, a.pop()) 不过,如果你经

我仔细搜索了一下,但找不到任何与这个确切的细节有关的东西。我有一份清单:

a = [two, three, one]
我想把
one
移到前面,这样它就变成:

a = [one, two, three]

问题是,它可以是列表中任意数量的数字。假设无法知道是50项还是3项。

索引与最后一项相关

a = a[-1:] + a[:-1]

这将适用于列表中任意数量的元素。

您可以使用以下代码:

a.insert(0, a.pop())
基本上:

a.insert(0, a.pop())
不过,如果你经常这样做,可以考虑使用

a = ['two', 'three', 'one']
a = a[-1:] + a[0:-1]
print a



a = ['two', 'three', 'one']

a[0:0] = a[-1:]
del a[-1]
print a

我更喜欢第二种方式,因为操作已经就绪,而在第一种方式中,将创建一个新列表

如果您想将列表的第一项移到最后一项,可以使用-

lst=['one','two','three']
lst.insert(len(lst),lst.pop(0)) # result ['two','three','one']
乐趣 插入 最好的方式是:

>>> a = ["two","three","one"]
>>> a.insert(0,a.pop())
>>> a
['one', 'two', 'three']
流行音乐 但是,如果我要做一些独创性的事情,我会这样做:

>>> a = ["two","three","one"]
>>> a = [a.pop()] + a
>>> a
['one', 'two', 'three']
片 最后一个练习是:

>>> a = ["two","three","one"]
>>> a = [a[-1]] + a[:-1]
>>> a
['one', 'two', 'three']

这就是我要说的:)。你也可以删除pop索引。@junjanes:它不应该用于空列表。您希望在空列表中移动什么?@MattJoiner:问题有点误读,不确定OP是否希望始终移动最后一个项目或任何项目。@Cat Plus:OP要求的解决方案适用于任意数量的项目。另外,如果您不希望出现异常,您可以始终执行
如果a:a.insert(0,a.pop())
:p当它“就位”时,
a
中的每个引用都需要移动,因此deque可能更好,除非
a
非常有用small@gnibbler我对你的评论很感兴趣,但我不明白你想说什么say@eyquem,无论使用insert还是slice赋值,基础列表都从相同的内存位置开始,所以在前面放一个额外的元素相当于a[1]=a[0];a[2]=a[1];a[3]=a[2]。。。这是在C级别完成的,因此比等效的Python代码快约100倍,但是赋值的数量与列表的长度成正比,因此操作是O(n)@gnibbler谢谢。这是一个很大的课题,我以后会更深入地研究它。我知道在就地操作期间,对象的位置不会改变,但指向该对象的指针的值在指针的底层C向量中改变:那么操作的成本是O(n),OK;但我不会把这些变化称为“分配”。赋值不仅仅是值的变化,因为它意味着一个对象,而不是一个变量,就像指针一样。@gnibbler顺便说一句,你肯定想写:……a[4]=a[3];a[3]=a[2];a[2]=a[1];a[1]=a[0];a[0]=插入值。当然,它适用于
a
的每一个长度,但如果可能出现“void a”的情况,我更喜欢:
a.insert(0,a.pop())如果a-else-None
,它看起来很奇怪,但它可以工作,而且操作已经到位