2016-07-21 3 views
-2

& 목록과 파이썬 스택의 차이점은 무엇입니까?파이썬에서리스트와 스택의 차이점은 무엇입니까?

나는 파이썬 문서에서 그 설명을 읽었지만 두 가지가 같다고 보입니다.

>>> stack = [3, 4, 5] 
>>> stack.append(6) 
>>> stack.append(7) 
>>> stack 
[3, 4, 5, 6, 7] 
>>> stack.pop() 
7 
>>> stack 
[3, 4, 5, 6] 
>>> stack.pop() 
6 
>>> stack.pop() 
5 
>>> stack 
[3, 4] 

답변

7

스택은 데이터 구조 개념이다. 이 문서는 Python list 객체를 사용하여 객체를 구현합니다. 이 자습서의 해당 부분은 목록을 스택으로 사용하는 이유입니다..

스택은 물건을 추가하는 것입니다. 스택을 다시 가져 가면 다시 역순으로, 처음에는 마지막으로 스타일을 적용합니다. 책이나 모자 나 ... 맥주 상자의 스택처럼 :

beer crate stacking

Wikipedia explanation를 참조하십시오.

목록 반면에 목록은 훨씬 더 다목적 있습니다, 당신은 목록의 아무 곳이나 요소를 추가하고 제거 할 수 있습니다. 꼭대기에있는 누군가와 맥주 상자를 쌓아서 그걸 시도하지 않겠습니다!

당신은 사용자 정의 클래스와 스택 구현할 수 : 단단하게

from collections import namedtuple 

class _Entry(namedtuple('_Entry', 'value next')): 
    def _repr_assist(self, postfix): 
     r = repr(self.value) + postfix 
     if self.next is not None: 
      return self.next._repr_assist(', ' + r) 
     return r 

class Stack(object): 
    def __init__(self): 
     self.top = None 
    def push(self, value): 
     self.top = _Entry(value, self.top) 
    def pop(self): 
     if self.top is None: 
      raise ValueError("Can't pop from an empty stack") 
     res, self.top = self.top.value, self.top.next 
     return res 
    def __repr__(self): 
     if self.top is None: return '[]' 
     return '[' + self.top._repr_assist(']') 

눈에 목록을 (다소 인위적으로),하지만 확실히 스택입니다 :

>>> stack = Stack() 
>>> stack.push(3) 
>>> stack.push(4) 
>>> stack.push(5) 
>>> stack 
[3, 4, 5] 
>>> stack.pop() 
5 
>>> stack.push(6) 
>>> stack 
[3, 4, 6] 
>>> stack.pop() 
6 
>>> stack.pop() 
4 
>>> stack.pop() 
3 
>>> stack 
[] 

파이썬 표준 라이브러리 아무튼 특정 스택 데이터 유형이 제공되지 않습니다. list 개체는 문제가 없습니다. list.append()list.pop() (인수가없는 후자)을 사용하여 스택으로 처리하면됩니다.

+0

감사합니다 .Martijn ... 그 큰 도움이되었습니다. 어떤 사람들은 질문을 낮추었지만 초보자로서 나는 혼란 스러웠고 대답이 매우 도움이된다는 것을 발견했습니다. – payal

1

"스택"은 list의 특정 응용 프로그램으로, 작업은 끝에 추가 (밀어 넣기) 및 끝에서 튀어 나오기 (당기기)로 제한됩니다.

0

파이썬 목록에서 스택으로 사용할 수도 있습니다. 일반 목록과 스택을 조합 한 목록을 생각해보십시오. 이것은 또한 ("마지막에, 제 아웃")리스트 방법은 추가 마지막 요소가 검색의 첫 번째 요소이다 스택으로 목록을 사용하는 것이 매우 용이하게

here을 설명한다 . 스택 맨 위에 항목을 추가하려면 append()를 사용하십시오. 에 스택의 상단에서 항목을 검색, 명시 적 인덱스 당신이 그들의 정확한 예를 사용하는 사실

없이 팝업()를 사용합니다. 그것이 "결합 된 데이터 구조"라는 사실에 혼란스러워합니까?

EDIT : 다른 사용자가 언급했듯이, 이것은 목록을 사용하여 구현 된 개념입니다.

0

Stack은 Last in First라는 개념으로 작동합니다. 스택에서 푸시 및 팝 작업을 수행 할 수 있습니다. 스택 목록은 추가, 삽입, 삭제, 연결 등과 같은 모든 작업을 수행하기 쉽습니다. 스택은 스택의 응용 프로그램이며 우리가 사용하는 데이터 구조와 같습니다 더.

관련 문제