카테고리 없음

파이썬에서 리스트를 회전하는 효율적인 방법

스택큐힙리스트 2023. 4. 27. 11:11
반응형

파이썬에서 리스트를 회전시키는 가장 효율적인 방법은 무엇인가요?

지금은 이렇게 하고 있습니다.

>>> def rotate(l, n):

... return l[n:] + l[:n]

...

>>> l = [1,2,3,4]

>>> rotate(l,1)

[2, 3, 4, 1]

>>> rotate(l,2)

[3, 4, 1, 2]

>>> rotate(l,0)

[1, 2, 3, 4]

>>> rotate(l,-1)

[4, 1, 2, 3]

더 나은 방법이 있을까요?

답변 1

collections.deque은 양쪽 끝을 끌거나 밀기에 최적화되어 있습니다. 그들은 심지어 전용 rotate() 방법을 갖고 있습니다.

from collections import deque

items = deque([1, 2])

items.append(3) # deque == [1, 2, 3]

items.rotate(1) # The deque is now: [3, 1, 2]

items.rotate(-1) # Returns deque to original state: [1, 2, 3]

item = items.popleft() # deque == [2, 3]

답변 2

파이썬에서 리스트를 회전하는 효율적인 방법

파이썬은 프로그래머가 많은 함수와 도구를 활용해 쉽게 리스트를 조작할 수 있는 강력한 언어입니다. 이 중에 리스트를 회전하는 방법을 알아보겠습니다. 리스트를 회전한다는 것은 리스트를 오른쪽 또는 왼쪽으로 시프트(shift)하는 것을 의미합니다. 이를 통해 리스트의 요소들이 다른 위치에 위치하게 됩니다.

가장 간단한 방법은 파이썬의 리스트 슬라이싱(Slicing)을 사용하는 것입니다. 이를 통해 리스트의 일부분을 추출하고 이를 다시 리스트의 끝에 추가할 수 있습니다. 즉, 리스트의 처음부터 k번째 요소까지의 부분리스트와 k번째 요소부터 끝까지의 부분리스트를 추출한 다음, 이를 역으로 연결하여 새로운 리스트를 만들 수 있습니다. 이 방법은 간단하고 직관적이지만, 리스트의 길이가 길어지면 연산 속도가 느려질 수 있습니다.

또 다른 방법은 파이썬의 deque(덱)을 사용하는 것입니다. deque는 양쪽 끝에서 삽입과 삭제가 가능한 큐(queue) 자료구조입니다. deque를 사용하면 리스트의 처음 또는 끝에서의 추가와 삭제가 더욱 빠르고 메모리를 덜 사용하게 됩니다. 이를 활용해서 리스트 회전을 구현할 수 있습니다. 예를 들어, 리스트를 오른쪽으로 k번 회전하고 싶다면 deque에 리스트의 k번째 요소부터 끝까지를 모두 추가한 다음, deque의 왼쪽에서 k개의 요소를 삭제하여 새로운 리스트를 만들면 됩니다. 이 방법은 리스트의 길이가 늘어나도 일정한 속도를 유지하며, 메모리 사용량도 최소화할 수 있습니다.

결론적으로, 리스트 회전은 파이썬에서 매우 일반적인 문제 중 하나입니다. 위에서 설명한 두 가지 방법을 활용하면 더욱 효율적이고 손쉽게 리스트를 회전할 수 있습니다. 파이썬의 다양한 도구와 함수들을 활용하여 리스트를 조작하는 방법을 익혀둔다면 더욱 다양한 문제를 효율적으로 해결할 수 있을 것입니다.

반응형