Różnica między list, sequence i slice w Pythonie?
Jakie są różnice między tymi wbudowanymi typami danych Pythona: Lista, sequence and slice ? Jak widzę, wszystkie trzy zasadniczo reprezentują to, co C++ i Java wywołują array .
5 answers
-
list
to więcej niż zwykłe tablice. Można je zainicjować bez podawania liczby elementów. Możeszappend
/push
do nich możeszremove
/pop
/del
elementy z nich, możesz mieć listy różnych typów obiektów (np.[1,'e', [3]]
), możesz mieć listy rekurencyjne... możesz też wycinać listy, co oznacza uzyskanie nowej listy zawierającej tylko kilka elementów. -
slice
są typem obiektu używanym "Za kulisami" do obsługi rozszerzonego krojenia w formiea[start:stop:step]
, jakohelp(slice)
ujawnia.
"Sequence" nie jest obiektem, bardziej jak nieformalny interfejs niektórych obiektów, takich jak list
implementować.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-27 11:44:40
Mieszasz bardzo różne rzeczy w swoim pytaniu, więc odpowiem na inne pytanie;- P
Pytacie teraz o jeden z najważniejszych interfejsów w Pythonie: iterable
- to w zasadzie wszystko, czego możecie użyć jak for elem in iterable
.
iterable
mA trzech Potomków: sequence
, generator
i mapping
.
Sekwencja jest iterowalna z dostępem losowym. Możesz poprosić o dowolny element sekwencji bez konieczności konsumowania przedmiotów przed nim. Z tym właściwość, którą można zbudować
slices
, która daje więcej niż jeden element na raz. Wycinek może dać ciąg dalszy:seq[from:until]
i każdy n-ty element:seq[from:until:nth]
.list
,tuple
istr
wszystkie są sekwencjami.Jeśli dostęp odbywa się za pomocą klawiszy zamiast pozycji całkowitych, masz mapowanie.
dict
jest podstawowym odwzorowaniem.Najbardziej podstawową iteracją jest generator . Obsługuje brak losowego dostępu, a tym samym brak krojenia. Musisz spożywać wszystkie przedmioty w kolejność, jaką otrzymują. Generator zazwyczaj tworzy ich elementy tylko wtedy, gdy je iterujesz. Powszechnym sposobem tworzenia
generators
są wyrażenia generatora. Wyglądają dokładnie tak, jak lista, z wyjątkiem nawiasów okrągłych, na przykład(f(x) for x in y)
. Wywołanie funkcji używającej słowa kluczowegoyield
również zwraca generator.
iterators
mają ten sam interfejs, co najbardziej podstawowy typ, który obsługują, A generator
. Są to tworzone jawnie przez wywołanie iter
na iterowalnym i używane są niejawnie we wszystkich rodzajach konstrukcji pętli.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-27 13:46:05
Lista jest sekwencją, ale sekwencja niekoniecznie jest listą. Sekwencja to dowolny typ, który obsługuje interfejs sekwencji ("protokół"). Odbywa się to poprzez pisanie kaczek, a nie poprzez ścisłą hierarchię dziedziczenia. Zauważ, że sekwencje są kontenerami, ale kontenery niekoniecznie są sekwencjami. (sekwencje są, cóż, sekwencyjne!)
Zobacz http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-buffer-xrange
Obiekty Slice są zazwyczaj tworzone pośrednio przez syntaktyczny sugar (foo[2:5]
) i dostarczane do specjalnych metod typu kontener (takich jak __getitem__
), które można zastąpić. Zazwyczaj nie będziesz musiał zajmować się plasterkami, chyba że stworzysz własne sekwencje / kontenery.
Zobacz http://docs.python.org/reference/datamodel.html#specialnames
Listy są porównywalne do tablic. Nie jestem pewien, ale myślę, że jest zaimplementowana w cpythonie jako dynamicznie rozwijająca się tablica. Jednak interfejs sprawia, że jest bardziej jak wektor C++ STL niż zwykła stara tablica.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-27 11:58:15
-
Listy są typem sekwencji, podobnym do tablicy
-
Sekwencja typy opisują superset funkcjonalny:
Istnieje sześć typów sekwencji: ciągi znaków, ciągi znaków Unicode, listy, krotki, bufory i Obiekty xrange.
- plasterki są zapisem dla submarrayów (lub podciągów, również)
Czytaj więcej ... http://docs.python.org/glossary.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-27 12:03:50
Ściśle mówiąc, kawałek jest typem, który reprezentuje zakres indeksów, np. początek, stop i krok. Plasterek nie jest typem pojemnika. Możesz użyć plasterka do indeksowania listy, w wyniku czego powstaje nowa lista, która jest kopią sublisty oryginalnej listy.
Listy różnią się od tablic C++ tym, że są heterogeniczne; elementy nie muszą być tego samego typu. I jak już zauważył MYYN, "sequence" wcale nie jest typem Pythona, a raczej opisem różnorodność wbudowanych typów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-27 11:36:09