Ротация списка Python

Возможный дубликат:
Эффективный способ переместить список в python

Я бы хотел повернуть список Python произвольным числом элементов вправо или влево (последнее с отрицательным аргументом).

Что-то вроде этого:

>>> l = [1,2,3,4] >>> l.rotate(0) [1,2,3,4] >>> l.rotate(1) [4,1,2,3] >>> l.rotate(-1) [2,3,4,1] >>> l.rotate(4) [1,2,3,4] 

Как это можно сделать?

4 Solutions collect form web for “Ротация списка Python”

 def rotate(l, n): return l[-n:] + l[:-n] 

Более традиционное направление:

 def rotate(l, n): return l[n:] + l[:n] 

Пример:

 example_list = [1, 2, 3, 4, 5] rotate(example_list, 2) # [3, 4, 5, 1, 2] 

Аргументы для rotate – это список и целое число, обозначающее сдвиг. Функция создает два новых списка, используя срез и возвращает конкатенацию этих списков. Функция rotate не изменяет список входных данных.

Если применимо, вы можете использовать collections.deque в качестве решения:

 import collections d = collections.deque([1,2,3,4,5]) d.rotate(3) print d >>> deque([3, 4, 5, 1, 2]) 

В качестве бонуса я бы ожидал, что он будет быстрее, чем встроенный список.

Следующая функция будет вращать список l , x пробелов справа:

 def rotate(l, x): return l[-x:] + l[:-x] 

Обратите внимание, что это только вернет исходный список, если x вне диапазона [-len(l), len(l)] . Чтобы он работал для всех значений x , используйте:

 def rotate(l, x): return li[-x % len(li):] + li[:-x % len(li)] 
 >>> l=[1,2,3,4] >>> l[1:]+l[:1] [2, 3, 4, 1] >>> l=[1,2,3,4] >>> l[2:]+l[:2] [3, 4, 1, 2] >>> l[-1:]+l[:-1] [4, 1, 2, 3] 

Общий поворот n влево (положительный y в вызове для rotate ) или правый (отрицательный y), затем:

 def rotate(l, y=1): if len(l) == 0: return l y = y % len(l) # Why? this works for negative y return l[y:] + l[:y] 

Если вы хотите, чтобы направление вращения было таким же, как ваш пример, просто отрицайте y во вращении.

 def rotate(l, y=1): if len(l) == 0: return l y = -y % len(l) # flip rotation direction return l[y:] + l[:y] 
  • Как преобразовать строку с разделителями-запятыми в список в Python?
  • Неожиданное поведение Extend со списком в Python
  • В чем разница между = b и a = b
  • Удалить пунктуацию из списка
  • Сортировка списка Python зависит от того, находятся ли элементы в другом списке
  • Списки Python со скандинавскими буквами
  • Как я могу отформатировать список для печати каждого элемента в отдельной строке в python?
  • Ссылка на элемент в списке кортежей
  • Python - лучший язык программирования в мире.