我有一个清单:
module.exports.bootstrap = function(cb) {
require('pmx').init({
http : true
});
cb();
};
我希望最后一个元素排在第一位并将所有元素都移到下一个位置。我期望的结果是:
a = [1, 2, 3, 4, 5, 6, 7]
答案 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]