Jeśli mam następujący kod Python
>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]
Czy x
zawsze będzie zagwarantowane [1,2,3]
, czy też możliwe są inne zamówienia elementów pośrednich?
Tak, kolejność elementów na liście python jest trwała.
def fn_1(): lst = [] lst.append(1) lst.append(2) return lst
idef fn_2(): print(fn_1())
czy kolejność będzie ZAWSZE bez względu na to, ile razy lub gdziekolwiek użyję fn_1 ()?Krótko mówiąc, tak, kolejność jest zachowana. W długim:
Zasadniczo następujące definicje zawsze będą miały zastosowanie do obiektów takich jak listy:
Lista to zbiór elementów, które mogą zawierać zduplikowanych elementów i ma określony porządek, że na ogół nie zmieni, chyba że wyraźnie się, aby to zrobić. stosy i kolejki to oba typy list, które zapewniają określone (często ograniczone) zachowanie podczas dodawania i usuwania elementów (stosy to LIFO, kolejki to FIFO). Listy są praktycznymi reprezentacjami, no cóż, list rzeczy. Ciąg może być traktowany jako lista znaków, ponieważ kolejność jest ważna (
"abc" != "bca"
), a duplikaty w treści ciągu są z pewnością dozwolone ("aaa"
mogą istnieć i!= "a"
).Zestaw to zbiór elementów, które nie mogą zawierać duplikaty i ma zakaz określony porządek, które mogą lub nie mogą zmieniać się w czasie. Zestawy nie reprezentują list rzeczy, tyle że opisują zakres pewnego wyboru rzeczy. Wewnętrzna struktura zestawu, w jaki sposób jego elementy są przechowywane względem siebie, zwykle nie ma na celu przekazywania użytecznych informacji. W niektórych implementacjach zestawy są zawsze sortowane wewnętrznie; w innych kolejność jest po prostu niezdefiniowana (zwykle w zależności od funkcji skrótu).
Kolekcja to ogólny termin odnoszący się do dowolnego obiektu używanego do przechowywania (zwykle zmiennej) liczby innych obiektów. Zarówno listy, jak i zestawy są rodzajem kolekcji. Krotki i tablice zwykle nie są uważane za kolekcje. Niektóre języki uznają również mapy (kontenery opisujące powiązania między różnymi obiektami) za rodzaj kolekcji.
Ten schemat nazewnictwa sprawdza się we wszystkich znanych mi językach programowania, w tym w Pythonie, C ++, Javie, C # i Lisp (w których listy nieprzestrzegające ich kolejności byłyby szczególnie katastrofalne). Jeśli ktoś wie o czymkolwiek, co nie jest prawdą, proszę to powiedzieć, a ja zredaguję moją odpowiedź. Zauważ, że określone implementacje mogą używać innych nazw dla tych obiektów, takich jak wektor w C ++ i flex w ALGOL 68 (obie listy; flex jest technicznie tylko zmienną tablicą).
Jeśli w twoim przypadku pozostało jakieś zamieszanie związane ze specyfiką działania
+
znaku, wiedz, że kolejność jest ważna dla list i chyba że istnieje bardzo dobry powód, by wierzyć inaczej, możesz prawie zawsze bezpiecznie założyć, że operacje na listach zachowują porządek . W tym przypadku+
znak zachowuje się bardzo podobnie do łańcuchów (które tak naprawdę są tylko listami znaków): pobiera zawartość listy i umieszcza ją za treścią innego.Jeśli mamy
Następnie
Jest taki sam jak
Który ocenia na
Podobnie jak
Produkuje
źródło
Mylisz „zestawy” i „listy”. Zestaw nie gwarantuje kolejności, ale listy tak.
Zestawy są deklarowane przy użyciu nawiasów klamrowych:
{}
. W przeciwieństwie do tego, listy są uznane za pomocą nawiasów kwadratowych:[]
.Nie gwarantuje zamówienia, ale lista:
źródło
Przypuszczam, że jedną z rzeczy, które mogą cię dotyczyć, jest to, czy wpisy mogą się zmienić, tak że na przykład 2 stanie się inną liczbą. Tutaj możesz się uspokoić, ponieważ w Pythonie liczby całkowite są niezmienne , co oznacza, że nie mogą się zmienić po ich utworzeniu.
Jednak nie wszystko w Pythonie jest niezmienne. Na przykład listy można modyfikować --- można je zmieniać po utworzeniu. Na przykład, jeśli masz listę list
Tutaj zmieniłem pierwszy wpis
a
(dodałem7
do niego). Można sobie wyobrazić tasowanie rzeczy i uzyskiwanie nieoczekiwanych rzeczy, jeśli nie jesteś ostrożny (i rzeczywiście dzieje się tak ze wszystkimi, gdy zaczynają programować w Pythonie w taki czy inny sposób; po prostu wyszukaj na tej stronie „modyfikowanie listy podczas przeglądania w pętli” to „, aby zobaczyć dziesiątki przykładów).Warto również na to zwrócić uwagę
x = x + [a]
ix.append(a)
to nie to samo. Drugi mutujex
, a pierwszy tworzy nową listę i przypisuje jąx
. Aby zobaczyć różnicę, spróbuj ustawićy = x
przed dodaniem czegokolwiekx
i wypróbowaniem każdego z nich, i spójrz na różnicę między nimiy
.źródło
aList = [1,2,3]
i = 0
aList
[2]
Morał polega na tym, że modyfikując listę w pętli sterowanej przez listę, wykonuje dwa kroki:
źródło
Tak, listy i krotki są zawsze uporządkowane, a słowniki nie
źródło