developer tip

Python 목록 회전

optionbox 2020. 10. 20. 07:32
반응형

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]

어떻게 할 수 있습니까?


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(li, 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]

참고 URL : https://stackoverflow.com/questions/9457832/python-list-rotation

반응형