Если у меня есть следующий код Python
>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]
Будет x
ли гарантировано всегда [1,2,3]
, или возможны другие заказы промежуточных элементов?
Да, порядок элементов в списке Python является постоянным.
def fn_1(): lst = [] lst.append(1) lst.append(2) return lst
иdef fn_2(): print(fn_1())
порядок будет ВСЕГДА, независимо от того, сколько раз или где я использую fn_1 ()?Короче да, порядок сохранился. В длинных:
В общем случае следующие определения всегда будут применяться к объектам, таким как списки:
список представляет собой набор элементов , которые могут содержать повторяющиеся элементы и имеют определенный порядок, как правило , не изменяется , если явно не сделано , чтобы сделать это. стеки и очереди - это оба типа списков, которые обеспечивают определенное (часто ограниченное) поведение для добавления и удаления элементов (стеки - это LIFO, а очереди - это FIFO). Списки - это практические представления о списках вещей. Строка может рассматриваться как список символов, так как важен порядок (
"abc" != "bca"
), и дубликаты в содержимом строки, безусловно, разрешены ("aaa"
могут существовать и!= "a"
).Набор представляет собой совокупность элементов , которые не могут содержать дубликаты и имеет не определенный порядок , который может или не может изменяться с течением времени. Наборы не столько представляют списки вещей, сколько описывают степень определенного выбора вещей. Внутренняя структура множества, как его элементы хранятся относительно друг друга, обычно не предназначена для передачи полезной информации. В некоторых реализациях наборы всегда внутренне отсортированы; в других порядок просто не определен (обычно в зависимости от хеш-функции).
Коллекция - это общий термин, относящийся к любому объекту, который используется для хранения (обычно переменного) числа других объектов. Оба списка и наборы являются типом коллекции. Кортежи и массивы обычно не считаются коллекциями. Некоторые языки считают карты (контейнеры, которые описывают связи между различными объектами) также типом коллекции.
Эта схема именования действует для всех известных мне языков программирования, включая Python, C ++, Java, C # и Lisp (в которых списки, не соблюдающие порядок, были бы особенно катастрофическими). Если кто-то знает, где это не так, просто скажите, и я отредактирую свой ответ. Обратите внимание, что конкретные реализации могут использовать другие имена для этих объектов, такие как вектор в C ++ и flex в ALGOL 68 (оба списка; flex технически является просто массивом изменяемого размера).
Если в вашем случае остается какая-то путаница из-за особенностей работы
+
знака, просто знайте, что порядок важен для списков, и если нет веских оснований полагать, что в противном случае вы почти всегда можете с уверенностью предположить, что операции со списками сохраняют порядок , В этом случае+
знак ведет себя так же, как и для строк (которые в любом случае являются просто списками символов): он берет содержимое списка и размещает его позади содержимого другого.Если у нас есть
затем
Такой же как
Который оценивает
Так же, как
Производит
источник
Вы путаете «наборы» и «списки». Набор не гарантирует порядок, но списки делают.
Наборы объявляются с помощью фигурных скобок:
{}
. В отличие от этого , списки объявляются с помощью квадратных скобок:[]
.Не гарантирует порядок, но список делает:
источник
Я предполагаю, что одна вещь, которая может касаться вас, может ли записи измениться, так что 2 становится, например, другим числом. Вы можете расслабиться здесь, потому что в Python целые числа неизменны , то есть они не могут измениться после того, как они созданы.
Однако не все в Python является неизменным. Например, списки являются изменяемыми - они могут изменяться после создания. Так, например, если у вас был список списков
Здесь я изменил первую запись
a
(я добавил7
к ней). Кто-то может представить себе что-то путать и получать неожиданные вещи, если вы не будете осторожны (и действительно, это случается со всеми, когда они так или иначе начинают программировать на Python; просто ищите на этом сайте «изменение списка во время циклического прохождения»). это "чтобы увидеть десятки примеров).Также стоит отметить, что
x = x + [a]
иx.append(a)
это не то же самое. Второй мутируетx
, а первый создает новый список и назначает егоx
. Чтобы увидеть разницу, попробуйте установить,y = x
прежде чем что-то добавлять,x
и попробовать каждый из них, и посмотрите на разницу между нимиy
.источник
ALIST = [1,2,3]
I = 0
список
[2]
Мораль заключается в том, что при изменении списка в цикле, управляемом списком, необходимо выполнить два шага:
источник
Да, списки и кортежи всегда упорядочены, а словари - нет.
источник