Latest web development tutorials

struttura dati python3

Questo capitolo è principalmente combinata con la conoscenza abbiamo appreso in precedenza per introdurre strutture dati di Python.


lista

lista Python è variabile, che è la caratteristica più importante lo distingue da stringhe e tuple, vale a dire una frase: L'elenco può essere modificato, mentre le stringhe e tuple non può.

Ecco un elenco di Python:

modo descrizione
list.append (x) Per aggiungere un elemento alla fine della lista, equivalente ad una [len (a):] = [x].
lista.extend (L) Aggiungendo tutti gli elementi della lista specificata per espandere l'elenco, l'equivalente di un [len (a):] = L.
list.insert (i, x) Inserire un elemento nella posizione specificata. Il primo parametro è da inserire nel suo indice davanti agli elementi, come a.insert (0, x) verrà inserito prima l'intero elenco, ma a.insert (len (a), x) è equivalente a a.append ( x).
list.remove (x) Rimuove il primo elemento della lista il cui valore è x. Se non esiste alcun elemento, verrà restituito un errore.
list.pop ([i]) Rimuovere gli elementi dalla posizione specificata in questo elenco, e restituirlo. Se non si specifica l'indice, a.pop () restituisce l'ultimo elemento. Element è stato immediatamente rimosso dalla lista. (Il metodo di parentesi quadre intorno al I indica che il parametro è facoltativo, non è che è necessario digitare le parentesi quadre, vedrete spesso questa notazione nella libreria di riferimento.)
list.clear () Rimuovere tutti gli elementi della lista, pari ad una del [:].
indice di una lista (x) Restituisce l'indice della lista con un valore di x nel primo elemento. Se nessun elemento corrispondente restituirà un errore.
list.count (x) Restituisce il numero di volte x appare nella lista.
list.sort () Degli elementi della lista da ordinare.
list.reverse () Elementi invertito nella lista.
list.copy () Restituisce una copia della lista è pari a un [:].

Il seguente esempio illustra il più elenco metodi:

>>> 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]

Nota: Simile a inserire, rimuovere o modificare il metodo elenco di ordinamento, ecc alcun valore di ritorno.


Utilizzare l'elenco come una pila

Il metodo di fare una lista di liste può essere facilmente utilizzato come una pila, pila come una struttura di dati specifico, il primo ad entrare l'ultimo elemento da liberare (LIFO). Utilizzare il metodo append () può aggiungere un elemento in cima alla pila. Senza un indice esplicito del pop () metodo può recuperare un elemento dalla cima alla pila. Ad esempio:

>>> 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]

Usare la lista come una coda

L'elenco può anche essere usato come una coda, la coda è il primo a unire gli elementi, il primo tolto, tuttavia, prendere questo elenco come lo scopo non è efficiente. Aggiungere alla fine degli elementi della lista o pop-up di velocità, tuttavia, per inserire o espellere dalla velocità della testa non è veloce (perché tutti gli altri elementi devono muoversi uno per uno) nell'elenco.

>>> 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'])

list comprehension

Elenco forniscono un modo conciso per creare liste dalla sequenza. Alcune applicazioni saranno generalmente applicati a ogni elemento di una sequenza di operazioni, con il risultato che si ottiene come gli elementi di generare una nuova lista, o crea sequenze determinate secondo condizioni determinazione.

Ogni lista di comprensione sono dopo per con un'espressione, quindi zero o più clausole for o if. Il risultato è una lista generata dalla successiva contesto e se secondo l'espressione. Se si desidera che la formula di una tupla, è necessario utilizzare parentesi.

Qui elencheremo ogni numero per tre, per ottenere una nuova lista:

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

Ora giochiamo piccoli trucchi:

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

Qui invochiamo un metodo personalizzato per ogni elemento in una sequenza:

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

Possiamo usare la clausola if come un filtro:

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

Qui ci sono alcuni demo su bicicletta e altre abilità:

>>> 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]

Di lista possono usare espressioni complesse o funzioni nidificate:

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

lista annidata comprensione

liste Python possono anche essere nidificati.

L'esempio seguente mostra l'elenco di matrice 3X4:

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

Il seguente esempio elenca matrice 3X4 alla lista di conversione 4X3:

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

Gli esempi che seguono possono anche utilizzare i seguenti metodi:

>>> 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]]

Un altro metodo:

>>> 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]]

istruzione del

È possibile utilizzare l'istruzione del dall'indice invece di valore per rimuovere un elemento da una lista. Questo è l'uso di pop () restituisce un valore diverso. È possibile utilizzare l'istruzione del per rimuovere un taglio dalla lista, o cancellare l'intero elenco (il nostro metodo precedente di presentazione viene assegnato un taglio alla lista vuota). Ad esempio:

>>> 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
[]

È anche possibile eliminare la variabile di istanza con del:

>>> del a

Tuple e sequenze

il numero tupla di valori separati da virgole consiste, ad esempio:

>>> 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))

Come si vede, in uscita tuple sono sempre racchiusa tra parentesi, per esprimere adeguatamente la struttura annidata. Non ci possono essere tra parentesi o quando si entra, ma le staffe sono di solito richieste (se la tupla è parte di un'espressione più grande).


insieme

Una collezione è una collezione non ordinata di elementi unici. Caratteristiche di base includono il test ed eliminando gli elementi duplicati.

È possibile creare un set di parentesi graffe ({}). Nota: Se si desidera creare un insieme vuoto, è necessario utilizzare il set () al posto di {}; che crea un dizionario vuoto, la sezione successiva introdurremo questa struttura dati.

Quanto segue è una semplice dimostrazione:

>>> 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'}

Collection supportano anche la derivazione della formula:

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

dizionario

Un altro tipo di dati utili integrata nel Python è il dizionario.

Una sequenza continua di indice intero, e questa differenza è, dizionario di parole chiave indicizzate parole chiave possono essere di qualsiasi tipo immutabile, di solito con una stringa o numerico.

Il modo migliore per capire come un dizionario sono coppie chiave => valore non ordinati. Nello stesso dizionario, le chiavi devono essere diversi tra loro.

Una coppia di parentesi graffe crea un dizionario vuoto: {}.

Questo è un semplice esempio dell'uso di un dizionario:

>>> 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

Costruttore dict () per costruire il dizionario direttamente dall'elenco chiave-tuple. Se si dispone di uno schema fisso, list comprehension specificare un particolare coppie chiave-valore:

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

Inoltre, il dizionario può essere usato per creare un'espressione per derivare alcun dizionario di chiavi e valori:

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

Se la parola chiave è semplicemente una serie di coppie chiave-valore che utilizzano argomenti chiave a volte più conveniente per specificare:

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

tecniche traversal

Quando si attraversa nei dizionari, il valore della chiave e corrispondente può usare gli elementi () metodo per l'interpretazione simultanea fuori:

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

Quando si attraversa in sequenza, l'indice di posizione e il valore corrispondente possono essere utilizzate enumerate () funzione anche ricevere:

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

Mentre attraversa due o più sequenze, è possibile utilizzare la zip () in combinazione:

>>> 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.

Per attraversare una sequenza inversa, prima di specificare la sequenza, e quindi chiamare reversesd () la funzione:

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

Attraversando una sequenza secondo l'ordine, l'uso della funzione sorted () restituisce una sequenza ordinata, non modifica il valore originale:

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

Vedere la documentazione