将列表的最后一个元素移到列表的第一个元素

时间:2016-04-30 12:40:41

标签: python list

我有一个清单:

module.exports.bootstrap = function(cb) {
  require('pmx').init({
    http : true
  });

  cb();
};

我希望最后一个元素排在第一位并将所有元素都移到下一个位置。我期望的结果是:

a = [1, 2, 3, 4, 5, 6, 7]

2 个答案:

答案 0 :(得分:12)

要在原地更改列表,只需将其弹出并将其插入前面:

a.insert(0, a.pop())

演示:

>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> a.insert(0, a.pop())
>>> a
[7, 1, 2, 3, 4, 5, 6]

但是,请注意所有其他元素必须向上移动一个位置,因此内部采用O(N)步骤(对于列表中的N个元素)。

您还可以使用切片和连接创建 new 列表对象:

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

但这仍然效率更低,因为现在你必须创建3个新的列表对象,使所采取的步骤数增加一倍。

如果您需要定期轮换列表,可能需要使用collections.deque() object代替:

from collections import deque

a = deque([1, 2, 3, 4, 5, 6, 7])
a.rotate(1)

deque轮换是一个O(K)过程,其中K是旋转的步数。

deque的不足之处在于任意索引可能会花费你的O(N)步骤来获取列表中的元素N,而索引到常规中的任何元素list是O(1)常数时间。

答案 1 :(得分:2)

弹出然后插入。

>>> a = [1,2,3,4,5,6,7]
>>> a.insert(0, a.pop())
>>> a
[7, 1, 2, 3, 4, 5, 6]