Ротация списка 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?
  • и {} vs list () и dict (), что лучше?
  • Python: подсчитать частоту слов в списке
  • Передавать элементы списка в качестве аргументов функции в python
  • Списки Python со скандинавскими буквами
  • генератор базового уровня python и список вопросов
  • return vs print list
  • Как найти длину словарных значений
  •  
    Interesting Posts for Van-Lav

    Как увидеть реальный SQL-запрос в Python cursor.execute

    API Marketo и Python, отсутствие запроса на отправку

    неправильный тип операнда для abs (): 'list'

    как генерировать URL-адрес от boto3 в веб-сервисах amazon

    SQLAlchemy устанавливает значение по умолчанию nullable = False

    Компиляция файлов pyx с зависимостями в разных пакетах

    Каков наиболее эффективный способ прокрутки данных с помощью панд?

    Как отсортировать индексированный фрейм данных

    Могу ли я создать путь к базе данных Django (для sqlite3) «кросс-платформенный»?

    Панды заполняют отсутствующие значения в dataframe из другого фрейма данных

    Можно ли построить неявные уравнения с использованием Matplotlib?

    Функция heapq.merge () для списка отсортированных файлов

    Как найти все точки пересечения между двумя контурными наборами эффективным образом

    SQLAlchemy – максимальная длина столбца

    Django – Правильный способ передать аргументы декораторам CBV?

    Python - лучший язык программирования в мире.