Является ли список Python гарантированным, чтобы его элементы оставались в том порядке, в котором они были вставлены?

Если у меня есть следующий код Python

>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]

Будет ли x гарантировано всегда быть [1,2,3] или возможны другие упорядочения временных элементов?

Ответ 1

Да, порядок элементов в списке python является постоянным.

Ответ 2

Короче говоря, да, порядок сохраняется. Длинные:

В общем случае следующие определения будут всегда применяться к объектам, таким как списки:

A list - это набор элементов, который может содержать повторяющиеся элементы и имеет определенный порядок, который обычно не изменяется, если явно не сделать этого. стеки и очереди - это оба типа списков, которые обеспечивают конкретное (часто ограниченное) поведение для добавления и удаления элементов (стеки являются LIFO, очереди - FIFO). Списки - это практические представления, ну, списки вещей. Строку можно рассматривать как список символов, так как порядок важен ("abc" != "bca"), и дубликаты в содержимом строки, безусловно, разрешены ("aaa" может существовать и != "a").

A set представляет собой набор элементов, которые не могут содержать дубликаты и имеют неопределенный порядок, который может или не может меняться со временем. Наборы не представляют списки вещей, так как они описывают степень определенного выбора вещей. Внутренняя структура множества, как его элементы хранятся относительно друг друга, обычно не предназначена для передачи полезной информации. В некоторых реализациях наборы всегда внутренне сортируются; в других порядок просто undefined (обычно в зависимости от хэш-функции).

Коллекция - это общий термин, относящийся к любому объекту, используемому для хранения (обычно переменного) числа других объектов. Оба списка и наборы - это тип коллекции. Кортежи и массивы обычно не считаются коллекциями. Некоторые языки рассматривают карты (контейнеры, которые описывают ассоциации между разными объектами) также как тип коллекции.

Эта схема именования верна для всех языков программирования, о которых я знаю, включая Python, С++, Java, С# и Lisp (в которых списки, не сохраняющие их порядок, будут особенно катастрофическими). Если кто-нибудь знает о том, где это не так, просто скажите об этом, и я отредактирую свой ответ. Обратите внимание, что для конкретных реализаций могут использоваться другие имена для этих объектов, такие как вектор в С++ и flex в ALGOL 68 (оба списка: flex - это просто просто массив,.

Если в вашем случае есть какая-то путаница из-за специфики того, как работает знак +, просто знайте, что порядок важен для списков, и если нет веских оснований полагать, что в противном случае вы можете почти всегда безопасно предположим, что операции списка сохраняют порядок. В этом случае знак + ведет себя так же, как и для строк (которые в действительности являются просто списками символов): он принимает содержимое списка и помещает его за содержимое другого.

Если мы имеем

list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]

Тогда

list1 + list2

То же, что и

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]

Что оценивается

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Во многом как

"abdcde" + "fghijk"

Производит

"abdcdefghijk"

Ответ 3

Я полагаю, что одна вещь, которая может касаться вас, заключается в том, могут ли записи меняться, так что, например, 2 становится другим числом. Здесь вы можете успокоить ум, потому что в Python целые числа неизменны, то есть они не могут измениться после их создания.

Не все в Python является неизменным. Например, списки изменяемы - они могут измениться после создания. Например, если у вас есть список списков

>>> a = [[1], [2], [3]]
>>> a[0].append(7)
>>> a
[[1, 7], [2], [3]]

Здесь я изменил первую запись a (я добавил 7 к ней). Можно подумать о том, чтобы перетасовать вещи и получить здесь неожиданные вещи, если вы не будете осторожны (и действительно, это происходит со всеми, когда они начинают программировать на Python так или иначе, просто выполните поиск на этом сайте для "изменения списка при прохождении через это" увидеть десятки примеров".

Также стоит отметить, что x = x + [a] и x.append(a) - это не одно и то же. Второй мутирует x, а первый создает новый список и назначает его x. Чтобы увидеть разницу, попробуйте установить y = x перед добавлением чего-либо в x и пробовать каждый из них, и посмотрите на разницу, которую они делают в y.

Ответ 4

Вы вводите в заблуждение "наборы" и "списки". Набор не гарантирует порядок, но списки делают.

Наборы объявляются с помощью фигурных скобок: {}. Напротив, списки объявляются с использованием квадратных скобок: [].

mySet = {a, b, c, c}

Не гарантирует порядок, но список:

myList = [a, b, c]

Ответ 5

aList = [1,2,3]

i = 0

for item in aList:  

    if i<2:  

            aList.remove(item)  

    i+=1  

aList

[2]

Мораль при изменении списка в цикле, управляемом списком, выполняет два шага:

aList=[1,2,3]
i=0
for item in aList:
    if i<2:
        aList[i]="del"
    i+=1

aList

['del', 'del', 3]
for i in range(2):
    del aList[0]

aList
[3]

Ответ 6

Да, списки и кортежи всегда упорядочены, а словари - не