2.2.6 Typy sekwencyjne

Python definiuje 6 typów sekwencyjnych: napisy, napisy w Unicode, listy, krotki, bufory, oraz obiekty xrange.

Literały napisowe są zapisywane w pojedyńczych lub podwójnych cudzysłowach: 'xyzzy', "frobozz". Dalsze informacje o literałach napisowych można odnaleźć w rozdziale 2 opisu języka. Napisy w Unicode są podobne do "zwykłych" napisów z tą różnicą, że tworzy się je z przedrostkiem "u": u'abc', u"def". Listy tworzy się za pomocą nawiasów kwadratowych, oddzielając elementy przecinkami: [a, b, c]. Krotki tworzy się oddzielając elementy przecinkami wewnątrz, lub bez nawiasów okrągłych, ale pusta krotka musi zawierać nawiasy, n.p.: a, b, c lub (). Po jedynym elemencie krotki musi znajdować się przecinek, n.p.: (d,).  

Obiekty buforów nie są obsługiwane bezpośrednio w składni Pythona. Z buforów możemy jednak skorzystać wykorzystyując funkcję wbudowaną buffer(). Bufory nie obsługują operacji łączenia ani mnożenia (repetycji).  

Obiekty xrange, podobnie jak bufory, tworzymy wykorzystując dedykowaną funkcję wbudowaną, w tym przypadku jest to xrange(). Obiekty xrange nie obsługują operacji wykrawania, łączenia ani repetycji, natomiast wywoływanie na nich operacji in, not in, min() oraz max() jest niewydajne.  

Operacje "in" i "not in" mają ten sam priorytet co operacje porównania. Operacje "+" i "*" mają ten sam priorytet co analogiczne operacje liczbowe.2.7

Tabela zawiera operacje obsługiwane przez większość typów sekwencyjnych. Operacje te ułożono w kolejności rosnących priorytetów (operacje zgrupowane w pojedynczej komórce tabeli posiadają równy priorytet). Zmienne n, i i j są liczbami całkowitymi:

Operacja  Wynik  Uwagi 
x in s 1 jeśli którykolwiek element s jest równy x, w przeciwnym wypadku 0 (1)
x not in s 0 jeśli którykolwiek element s jest równy x, w przeciwnym wypadku 1 (1)
s + t złączenie tabel s i t  
s * n , n * s połączone n płytkich kopii s (2)
s[i] element o indeksie i sekwencji s, zaczynając od 0 (3)
s[i:j] wycinek sekwencji s od elementu i do j (3), (4)
len(s) ilość elementów s  
min(s) najmniejszy element s  
max(s) największy element s  
 

Uwagi:

(1)
W przypadku, gdy s jest napisem zwykłym lub napisem Unicode, operacje in oraz not in działają jak sprawdzenie występowania ciągu znaków w napisie. W wersjach Pythona wcześniejszych od wersji 2.3 wartość x musiała być napisem o długości 1. W wersjach Pythona od 2.3 wzwyż x może być napisem dowolnej długości.

(2)
Wartości n mniejsze od 0 są traktowane jak 0 (co w wyniku daje pustą sekwencję tego samego typu co s). Zwracamy uwagę na to, że kopie są płytkie, co oznacza, że struktury zagnieżdżone nie podlegają kopiowaniu. Jest to przyczyna błędów początkujących programistów. Weźmy pod uwagę następujący przykład:

>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]

Mamy tu przykład zagnieżdżenia trzech kopii pustej listy [[]] w zmiennej lists. Pusta lista, będąca elementem składowym, występuje w trzech miejscach, lecz jest to wciąż ten sam obiekt. Listę różnych elementów składowych możemy uzyskać w następujący sposób:

>>> lists = [[] for i in range(3)]
>>> lists[0].append(3)
>>> lists[1].append(5)
>>> lists[2].append(7)
>>> lists
[[3], [5], [7]]

(3)
Jeśli i lub j jest liczbą ujemną, indeks jest wyliczany względem końca sekwencji, to znaczy zostaje zastąpiony przez len(s) + i lub len(s) + j Zwróć uwagę, że -0 jest nadal równe 0.

(4)
Wycinek sekwencji s od i do j jest zdefiniowany jako sekwencja elementów o indeksie k takich, że i <= k < j. Jeśli i lub j jest większe od len(s), zostaje użyte len(s). jeśli pominięto i zostaje użyte 0. Jeśli pominięto j, zostaje użyte len(s). Jeśli i jest większe lub równe j, wynik jest pustą sekwencją.



... liczbowe.2.7
Muszą mieć równy priorytet, ponieważ parser nie jest w stanie określić typu operandów.


Podsekcje
Zajrzyj do Informacji na temat tej publikacji... aby pomóc w jej rozwoju.