Почему списки Python имеют поп (), но не нажатие ()

Необходимо получить контекст устройства окна ( GetWindowDC() ) и изображение копии ( BitBlt() ) от него. В зависимости от чего еще Вы знаете о приложении, Вы будете использовать различные методы для нахождения который дескриптор окна передать в GetWindowDC().

245
задан Gaz_Edge 1 May 2018 в 05:27
поделиться

9 ответов

Потому что «append» существовало задолго до того, как было придумано «pop». Python 0.9.1 поддерживал list.append в начале 1991 года. Для сравнения, вот часть обсуждения comp.lang.python о добавлении pop в 1997 году. Гвидо писал:

Для реализации стека потребуется добавить примитив list.pop () (и нет я не против этого один по любому принципу). list.push () можно добавить для симметрия с list.pop (), но я не большой поклонник нескольких названий для та же операция - рано или поздно вы собираетесь читать код, который использует другой, так что вам нужно научиться both, which is more cognitive load.

You can also see he discusses the idea of if push/pop/put/pull should be at element [0] or after element [-1] where he posts a reference to Icon's list:

I stil think that all this is best left out of the list object implementation -- if you need a stack, or a queue, with particular semantics, write a little class that uses a lists

In other words, for stacks implemented directly as Python lists, which already supports fast append(), and del list[-1], it makes sense that list.pop() work by default on the last element. Even if other languages do it differently.

Implicit here is that most people need to append to a list, but many fewer have occasion to treat lists as stacks, which is why list.append came in so much earlier.

231
ответ дан 23 November 2019 в 03:07
поделиться

Потому что он добавляет; это не толкает. «Добавление» добавляет в конец списка, «выталкивание» добавляет в начало.

Подумайте о очереди и о стеке.

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

Edit: Если перефразировать мое второе предложение более точно, «добавление» очень ясно подразумевает добавление чего-либо в конец списка, независимо от базовой реализации. Менее ясно, где добавляется новый элемент, когда он «выталкивается». При добавлении в стек что-то помещается «наверх», но то, где это на самом деле находится в базовой структуре данных, полностью зависит от реализации. С другой стороны, добавление в очередь подразумевает добавление ее в конец.

15
ответ дан 23 November 2019 в 03:07
поделиться

Потому что «добавить» интуитивно означает «добавить в конец списка». Если бы это называлось "push", было бы неясно, добавляем ли мы что-то в конец или в начало списка.

9
ответ дан 23 November 2019 в 03:07
поделиться

Ни в коем случае не официальный ответ (просто предположение, основанное на использовании языка), но Python позволяет использовать списки как стеки (например, раздел 5.1.1 руководства ). Однако список по-прежнему в первую очередь является списком, поэтому операции, общие для обоих, используют термины списка (например, добавление), а не термины стека (например, push). Так как операция pop не так часто встречается в списках (хотя можно было использовать removeLast), они определили pop (), но не push ().

7
ответ дан 23 November 2019 в 03:07
поделиться

Потому что он добавляет элемент в список? Когда речь идет о стопках, обычно используется толчок.

10
ответ дан 23 November 2019 в 03:07
поделиться

Хорошо, личное мнение здесь, но Добавление и начало подразумевают точные позиции в set.

Push и Pop - это на самом деле концепции, которые могут быть применены к любому концу набора ... Пока вы последовательны ... По некоторым причинам мне кажется, что Push () должен применяться к передней части набора ...

3
ответ дан 23 November 2019 в 03:07
поделиться

К вашему сведению, не так уж сложно составить список с методом 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)

... и я не знаю '

3
ответ дан 23 November 2019 в 03:07
поделиться

Вероятно, потому что исходная версия Python ( C Python) была написана на C, а не на C ++.

Идея, что список формируется путем размещения элементов в позади чего-то, вероятно, не так хорошо известна, как идея их добавления.

0
ответ дан 23 November 2019 в 03:07
поделиться

Push - это определенное поведение стека ; если вы поместите A в стек (B, C, D), вы получите (A, B, C, D).

Если вы использовали python append, результирующий набор данных будет выглядеть как (B, C, D, A )

Edit: Ого, святой педантизм.

Я предполагаю, что из моего примера будет ясно, какая часть списка является верхней, а какая - нижней. Предполагая, что большинство из нас здесь читает слева направо, первый элемент любого списка всегда будет слева.

1
ответ дан 23 November 2019 в 03:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: