[python] 파이썬 목록에 pop ()이 있지만 push ()가없는 이유

이미 -1에서 색인 된 마지막 요소를 제거하고 반환하고 의미가 해당 용도와 일치하는 파이썬 list.append함수가 호출되지 않은 이유를 아는 사람이 있습니까?list.pushlist.poplist.append



답변

“추가”는 “팝”이 생각되기 오래 전에 존재했기 때문에. 파이썬 0.9.1 은 1991 년 초에 list.append를 지원했습니다. 이에 비해 1997 년에 pop을 추가 하는 것에 대한 comp.lang.python 에 대한 토론 의 일부가 있습니다 . Guido는 다음과 같이 썼습니다.

스택을 구현하려면 list.pop () 프리미티브를 추가해야합니다 (그리고 원칙에 따라이 특정 스택에 반대하지 않습니다). list.pop ()을 사용하여 대칭을 위해 list.push ()를 추가 할 수는 있지만 동일한 작업에 대해 여러 이름을 많이 사용하지는 않습니다. 조만간 다른 코드를 사용하는 코드를 읽을 것이므로 인지력이 높은 두 가지를 모두 배워야합니다.

또한 그는 push / pop / put / pull이 요소 [0] 또는 요소 [-1] 뒤에 있어야 아이콘의 목록에 대한 참조를 게시해야한다는 아이디어를 논의 할 수 있습니다.

나는이 모든 것이 목록 객체 구현에서 제외되는 것이 가장 좋다고 생각합니다. 스택이나 특정 의미가있는 대기열이 필요한 경우 목록을 사용하는 작은 클래스를 작성하십시오.

즉, 이미 빠른 append () 및 del list [-1]을 지원하는 Python 목록으로 직접 구현 된 스택의 경우 list.pop ()은 기본적으로 마지막 요소에서 작동한다는 것이 합리적입니다. 다른 언어에서도 다르게 할 수 있습니다.

여기에는 대부분의 사람들이 목록에 추가해야하지만 목록을 스택으로 취급 할 기회가 적은 사람들이 많기 때문에 list.append가 훨씬 일찍 시작되었습니다.


답변

그것이 추가되기 때문에; 밀지 않습니다. “추가”는 목록의 끝에 추가하고 “푸시”는 앞에 추가합니다.

대기열과 스택을 생각하십시오.

http://docs.python.org/tutorial/datastructures.html

편집 : 두 번째 문장을 더 정확하게 말하면 “추가” 는 기본 구현에 관계없이 목록 끝에 무언가를 추가한다는 것을 분명히 의미 합니다. “푸시”될 때 새 요소가 추가되는 위치가 명확하지 않습니다. 스택에 밀어 넣는 것은 “맨 위”에 놓이지 만 실제로 기본 데이터 구조로 들어가는 위치는 구현에 따라 완전히 다릅니다. 반면 대기열을 밀면 끝까지 추가됩니다.


답변

목록에 요소를 추가하기 때문에? 푸시는 일반적으로 스택을 참조 할 때 사용됩니다.


답변

“append”는 직관적으로 “목록 끝에 추가”를 의미하기 때문입니다. “푸시 (push)”라고 불렀다면, 꼬리 나 목록의 머리에 물건을 추가 할 것인지 불분명합니다.


답변

공식적인 대답은 아니지만 (언어 사용에 근거한 추측) 파이썬은 목록을 스택으로 사용할 수 있습니다 (예 : 튜토리얼의 5.1.1 섹션 ). 그러나 목록은 여전히 ​​모든 목록 중 하나이므로 둘 다에 공통적 인 연산은 스택 용어 (즉, 푸시)가 아닌 목록 용어 (즉, 추가)를 사용합니다. 팝 연산은 목록에서 일반적이지 않기 때문에 ( ‘removeLast’를 사용할 수는 있었지만) pop ()을 정의했지만 push ()는 정의하지 않았습니다.


답변

좋아, 개인적인 의견은 여기 있지만 Append와 Prepend는 세트에서 정확한 위치를 암시합니다.

Push와 Pop은 실제로 어떤 세트의 끝에 적용 할 수있는 개념입니다 … 일관성이있는 한 … 어떤 이유로 나에게 Push ()는 세트…


답변

참고로, 푸시 방법이있는 목록을 만드는 것은 그리 어렵지 않습니다.

>>> class StackList(list):
...     def push(self, item):
...             self.append(item)
...
>>> x = StackList([1,2,3])
>>> x
[1, 2, 3]
>>> x.push(4)
>>> x
[1, 2, 3, 4]

스택은 다소 추상적 인 데이터 유형입니다. “푸시”와 “퍼핑”이라는 개념은 실제로 스택이 어떻게 구현되는지에 독립적입니다. 예를 들어 이론적으로 다음과 같은 스택을 구현할 수 있습니다 (왜 그런지 모르겠습니다).

l = [1,2,3]
l.insert(0, 1)
l.pop(0)

… 링크 목록을 사용하여 스택을 구현하지 않았습니다.