Кто-нибудь знает, почему list.append
функция Python не вызывается, list.push
учитывая, что уже есть a, list.pop
который удаляет и возвращает последний элемент (индексированный в -1), и list.append
семантика согласуется с этим использованием?
265
pop
может выскочить элементы из любого места в списке.append
не может «протолкнуть» что-то в середину списка.Ответы:
Потому что «добавление» существовало задолго до того, как о «попсе» думали. Python 0.9.1 поддерживал list.append в начале 1991 года. Для сравнения, вот часть обсуждения на comp.lang.python о добавлении pop в 1997 году. Гвидо написал:
Вы также можете видеть, что он обсуждает идею о том, должен ли push / pop / put / pull находиться в элементе [0] или после элемента [-1], где он публикует ссылку на список Icon:
Другими словами, для стеков, реализованных непосредственно как списки Python, которые уже поддерживают быстрые append () и del list [-1], имеет смысл, что list.pop () по умолчанию работает с последним элементом. Даже если другие языки делают это по-другому.
Здесь подразумевается, что большинству людей нужно добавлять в список, но гораздо меньше людей имеют возможность рассматривать списки как стеки, поэтому list.append появился намного раньше.
источник
you're going to *read* code that uses the other one (...) which is more cognitive load
Запоминание «нет толчка» только создает когнитивную нагрузку, когда вы пишете код. Вспоминая, что «push - это точный синоним добавления», вводит когнитивную нагрузку всякий раз, когда вы читаете тот, который вы видите реже. См. Stackoverflow.com/questions/3455488/… для получения дополнительной информации о том, почему люди думают, что читаемость часто превосходит удобочитаемостьПотому что это добавляет; это не толкает «Добавление» добавляет в конец списка, «добавление» добавляет вперед.
Подумайте об очереди против стека.
http://docs.python.org/tutorial/datastructures.html
Изменить: Чтобы перефразировать мое второе предложение более точно, «Добавление» очень четко подразумевает добавление чего-либо в конец списка, независимо от базовой реализации. Где новый элемент добавляется, когда он «выдвинут», менее понятно. Выталкивание в стек ставит что-то на «вершину», но то, куда это фактически входит в базовую структуру данных, полностью зависит от реализации. С другой стороны, добавление в очередь подразумевает добавление ее в конец.
источник
push
добавляет к концу.list.pop
семантику,list.append
помещает элементы в список при просмотре в виде стека.Потому что он добавляет элемент в список? Push обычно используется при обращении к стекам.
источник
Потому что «добавить» интуитивно означает «добавить в конец списка». Если бы это называлось «push», было бы неясно, добавляем ли мы что-то в конец или в начало списка.
источник
pop
операция. Так какpush
и,pop
как правило, являются стековыми операциями и идут вместе, следует ожидать, что они работают в одном конце списка.Ни в коем случае не официальный ответ (просто предположение, основанное на использовании языка), но Python позволяет использовать списки в качестве стеков (например, раздел 5.1.1 учебного пособия ). Тем не менее, список по-прежнему является прежде всего списком, поэтому операции, которые являются общими для обоих, используют термины списка (то есть, добавляют), а не термины стека (то есть, push). Поскольку операция pop не так часто встречается в списках (хотя можно было бы использовать removeLast), они определили pop (), но не push ().
источник
Хорошо, личное мнение здесь, но Append и Prepend подразумевают точные позиции в наборе.
Push и Pop - это действительно концепции, которые можно применять к любому концу набора ... До тех пор, пока вы последовательны ... По некоторым причинам, мне кажется, что Push () должен применяться к передней части набора. устанавливать...
источник
К вашему сведению, не так уж сложно составить список с методом push:
Стек - это несколько абстрактный тип данных. Идея «проталкивания» и «выталкивания» в значительной степени не зависит от того, как на самом деле реализован стек. Например, вы можете теоретически реализовать стек следующим образом (хотя я не знаю, почему вы это сделаете):
... и я не стал использовать связанные списки для реализации стека.
источник
Push - это определенное поведение стека ; если вы положите A в стек (B, C, D), вы получите (A, B, C, D).
Если вы использовали python append, результирующий набор данных будет выглядеть так (B, C, D, A)
Редактировать: Вау, священная педантичность.
Я предполагаю, что из моего примера будет ясно, какая часть списка является верхней, а какая - нижней. Предполагая, что большинство из нас здесь читают слева направо, первый элемент любого списка всегда будет слева.
источник
Возможно, потому что оригинальная версия Python ( C Python) была написана на C, а не на C ++.
Идея о том, что список формируется путем помещения чего-либо на задний план, вероятно, не так известна, как мысль о добавлении их в список.
источник
Push и Pop имеют смысл с точки зрения метафоры стопки тарелок или подносов в кафетерии или буфете, в частности те, которые имеют тип держателя с пружиной внизу, так что верхняя тарелка (более или менее ... теоретически) в том же месте, независимо от того, сколько плит находится под ним.
Если вы снимаете лоток, вес на пружине становится немного меньше, и стопка немного «поднимается» вверх, если вы ставите тарелку обратно, она «толкает» стопку вниз. Так что если вы думаете о списке как о стеке, а последний элемент - как о верхнем, то у вас не должно быть большой путаницы.
источник