Latest web development tutorials

Struktura danych Python3

Ten rozdział jest łączony głównie z wiedzy dowiedzieliśmy się wcześniej do wprowadzenia struktur danych Pythona.


lista

Lista Python jest zmienna, która jest najważniejsza cecha odróżnia je od łańcuchów i krotki, mianowicie jednym zdaniu: Lista może być modyfikowane, a struny i krotki nie mogę.

Oto lista Python:

sposób opis
list.append (x) Aby dodać element do końca listy, odpowiednik a [len (a):] = [x].
list.extend (L) Dodając wszystkich elementów podanej listy, aby rozwinąć listę, odpowiednik [len (a):] = L.
list.insert (i, x) Wstawianie elementu w określonym miejscu. Pierwszym parametrem jest do umieszczenia w indeksie przed elementami, takimi jak a.insert (0, x) zostanie umieszczona przed całej listy, a a.insert (len (a), x) jest równa a.append ( x).
list.remove (x) Usuwa pierwszy element listy, którego wartość wynosi x. Jeśli nie ma takiego elementu, zwróci błąd.
list.pop ([i]) Usuwanie elementów z określonej pozycji na liście, i zwraca go. Jeśli nie określisz indeksu a.pop () zwraca ostatni element. Element został natychmiast usunięty z listy. (Metoda nawiasach kwadratowych wokół I wskazuje, że parametr jest opcjonalny, a nie, że należy wpisać w nawiasach kwadratowych, często można zobaczyć ten zapis w Python Library Reference).
list.clear () Usuń wszystkie pozycje na liście, takie same del znakiem [:].
list.index (x) Zwraca wskaźnik listy o wartości X w pierwszym elemencie. Jeśli żaden element nie pasujący zwróci błąd.
list.count (x) Zwraca liczbę razy x pojawi się na liście.
list.sort () Elementów na liście mają być sortowane.
list.reverse () Odwrócone elementy znajdujące się na liście.
list.copy () Zwraca płytkie kopia listy jest równa [:].

Poniższy przykład ilustruje najbardziej listy metod:

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
2 1 0
>>> a.insert(2, -1)
>>> a.append(333)
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]

Uwaga: Podobnie jak wstawić, usunąć lub zmodyfikować listę Metoda sortowania itd nie zwraca wartości.


Użyj listy jako stos

Sposób wytwarzania listę list może być łatwo stosowany w stos, stos w postaci określonej struktury danych, pierwszych wejść ostatniego elementu do uwolnienia (LIFO). Za pomocą metody append () można dodać element na szczycie stosu. Bez wyraźnego wskaźnika pop () metoda może pobrać element ze szczytu stosu. Na przykład:

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

Użyj listy jako kolejka

Lista może być również stosowany jako kolejka kolejka jest pierwszym połączyć elementy pierwszy wyjęty, jednak przy tej listy w celu nie jest wydajne. Dodaj na końcu listy lub pop-up elementów szybkości, jednak włożyć lub wyjąć z prędkością głowicy nie jest szybki (bo wszystkie inne elementy trzeba przenieść jeden po drugim) na liście.

>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")           # Terry arrives
>>> queue.append("Graham")          # Graham arrives
>>> queue.popleft()                 # The first to arrive now leaves
'Eric'
>>> queue.popleft()                 # The second to arrive now leaves
'John'
>>> queue                           # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])

Ułatwienia Lista

Ułatwienia Lista dostarczyć zwięzły sposób tworzenia list z sekwencji. W niektórych zastosowań na ogół stosować do każdego elementu sekwencji operacji, w wyniku której otrzymuje się jako elementy do generowania nowej listy lub tworzenie sekwencji określonych w zależności od warunków oznaczenia.

Każda lista rozumienie są po za z wyrazem, to zero lub więcej, lub jeśli klauzul. Wynikiem jest lista generowany z kolejnym kontekstu i po według wyrażenia. Jeśli chcesz formułę krotki, należy użyć nawiasów.

Tutaj będziemy notować każdego numeru przez trzy, aby uzyskać nową listę:

>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]

Teraz gramy małe sztuczki:

>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]

Tutaj możemy wywołać metodę indywidualnie dla każdego elementu w kolejności:

>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']

Możemy użyć klauzuli if jako filtr:

>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]

Oto niektóre dema na rowerowej oraz innych umiejętności:

>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]

Ułatwienia Lista może używać złożonych wyrażeń lub zagnieżdżone funkcje:

>>> [str(round(355/113, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

Zagnieżdżone listowego

Wykazy Python może być również zagnieżdżone.

Poniższy przykład pokazuje listę macierzy 3X4:

>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]

Poniższy przykład wymienia macierzy 3x4 do listy konwersji 4x3:

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Poniższe przykłady mogą również skorzystać z następujących metod:

>>> transposed = []
>>> for i in range(4):
...     transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Inna metoda:

>>> transposed = []
>>> for i in range(4):
...     # the following 3 lines implement the nested listcomp
...     transposed_row = []
...     for row in matrix:
...         transposed_row.append(row[i])
...     transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

oświadczenie del

Można użyć instrukcji del przez indeks zamiast wartości, aby usunąć element z listy. To zastosowanie pop () zwraca inną wartość. Można użyć instrukcji del usunąć wycięty z listy lub usunąć całą listę (nasz poprzedni sposób prezentacji jest przypisany przyciąć do pustej listy). Na przykład:

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

Można również usunąć zmienną instancji z del:

>>> del a

Krotki i sekwencje

Numer krotka wartości oddzielonych przecinkami składa się na przykład:

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

Jak widać, na wyjściu krotki są sprecyzowane w nawiasach, w celu poprawnego wyrażania zagnieżdżony strukturę. Nie może być żadnych wsporników lub podczas wprowadzania, a wsporniki są zwykle wymagane (gdy krotka jest częścią większej ekspresji).


Ustaw

Zbiór jest nieuporządkowana kolekcja unikalnych elementów. Podstawowe funkcje obejmują testowanie i eliminowanie duplikatów elementów.

Można utworzyć zestaw klamrowych ({}). Uwaga: Jeśli chcesz utworzyć pusty zestaw, należy użyć zestawu () zamiast {}; które tworzy pusty słownika, następnym rozdziale przedstawimy tę strukturę danych.

Poniżej znajduje się prosty przykład:

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 删除重复的
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 检测成员
True
>>> 'crabgrass' in basket
False

>>> # 以下演示了两个集合的操作
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  # a 中唯一的字母
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 在 a 中的字母,但不在 b 中
{'r', 'd', 'b'}
>>> a | b                              # 在 a 或 b 中的字母
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 在 a 和 b 中都有的字母
{'a', 'c'}
>>> a ^ b                              # 在 a 或 b 中的字母,但不同时在 a 和 b 中
{'r', 'd', 'b', 'm', 'z', 'l'}

Kolekcja wspierać również na wyprowadzenie wzoru:

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

słownik

Innym użytecznym typem danych wbudowane w Pythonie jest słownik.

Ciągły sekwencja wskaźnika liczby całkowitej, a różnica ta jest indeksowana słowniku słów kluczowych słowa kluczowe mogą być dowolnego typu niezmienna, zwykle z ciągiem lub numeryczną.

Najlepszym sposobem, aby zrozumieć go jako słowniku są pary klucz => wartość nieuporządkowane. W tym samym słowniku, przyciski muszą być różne od siebie.

Para szelkami tworzy pusty słownika: {}.

Jest to prosty przykład stosowania słownika:

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys())
['irv', 'guido', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False

Konstruktor dict (), aby zbudować słownika bezpośrednio z listy klucz krotki. Jeśli masz stały wzór, listowych określić konkretny par klucz-wartość:

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}

Ponadto słownika mogą być wykorzystywane do tworzenia w celu uzyskania ekspresji dowolnego słownika kluczy i wartości:

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

Jeśli słowo kluczowe jest po prostu ciągiem par klucz-wartość za pomocą słów kluczowych argumentów czasem wygodniej jest określać:

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}

techniki traversal

Podczas przechodzenia w słownikach, wartość klucza i odpowiedni mogą korzystać z przedmiotów () Metoda symultanicznego na zewnątrz:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

Podczas przechodzenia w sekwencji, wskaźnik położenia i odpowiadająca jej wartość może być stosowany enumerate () Funkcja otrzymują również:

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

Przemierzając dwóch lub więcej sekwencji, można użyć zip () w kombinacji:

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

Aby przechodzić odwrotnej kolejności, najpierw określić kolejność, a następnie zadzwonić reversesd () Funkcja:

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

Ruch sekwencję zgodnie z zamówieniem, korzystanie z funkcji segregowanych () zwraca posortowaną sekwencję, nie zmienia oryginalną wartość:

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

Zapoznaj się z dokumentacją