2016-04-30 6 views

ответ

12

Чтобы изменить список на месте, просто вставьте его и вставьте его на фронте:

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

Demo:

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

Однако, обратите внимание, что все остальные элементы должны быть сдвинуты на место для этого, так внутренне O принимаются (N) шагов (для N элементов в списке).

Вы также можете создать новый объект списка с помощью нарезки и конкатенации:

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) процессом, где К числу шагов вращались.

disavantage из deque что произвольная индексация может стоить до O (N) шаги, чтобы добраться до элемента N в списке, в то время как индексирование к любому элементу в регулярном списке O (1) постоянное время ,

+0

thx это хорошо работает –

+0

yep, 'deque', безусловно, является правильной структурой данных здесь. – timgeb

2

Поместите его, а затем вставьте его.

>>> a = [1,2,3,4,5,6,7] 
>>> a.insert(0, a.pop()) 
>>> a 
[7, 1, 2, 3, 4, 5, 6] 
Смежные вопросы