Latest web development tutorials

estrutura de dados Python3

Este capítulo é combinada principalmente com o conhecimento que aprendemos anteriormente para introduzir estruturas de dados Python.


lista

lista Python é variável, que é a característica mais importante distingue de strings e tuplas, ou seja, uma frase: A lista pode ser modificada, enquanto as cordas e tuplas não pode.

Aqui está uma lista de Python:

caminho descrição
list.append (x) Para adicionar um item para o fim da lista, o equivalente a um [len (a):] = [X].
list.extend (L) Ao adicionar todos os elementos da lista especificada para expandir a lista, o equivalente de um [len (a):] = L.
list.insert (I, x) Inserir um item no local especificado. O primeiro parâmetro está a ser inserido no seu índice em frente dos elementos, tais como a.insert (0, X) vai ser inserido antes que a lista inteira, mas a.insert (len (a), x) é equivalente a a.append ( x).
list.remove (x) Remove o primeiro elemento da lista cujo valor é x. Se não existe tal elemento, ele retornará um erro.
list.pop ([i]) Remover elementos da posição especificada na lista, e devolvê-lo. Se você não especificar o índice, a.pop () retorna o último elemento. Elemento foi imediatamente removido da lista. (O método de colchetes ao redor do i indica que o parâmetro é opcional, não que você deve digitar colchetes, você vai ver muitas vezes essa notação em Python Library Reference.)
list.clear () Remova todos os itens da lista, o equivalente a um del [:].
list.index (x) Retorna o índice da lista com um valor de x no primeiro elemento. Se nenhum elemento correspondente retornará um erro.
list.count (x) Retorna o número de vezes x aparece na lista.
list.sort () Dos elementos da lista a ser classificado.
list.reverse () elementos invertidos na lista.
list.copy () Retorna uma cópia superficial da lista é igual a [:].

O exemplo seguinte ilustra a maior parte da lista de métodos:

>>> 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: Semelhante ao inserir, remover ou modificar o método de lista de classificação, etc. nenhum valor de retorno.


Use a lista como uma pilha

O método de fazer uma lista de listas podem ser facilmente utilizados como uma pilha, a pilha como uma estrutura de dados específica, o primeiro a entrar no último elemento a ser libertado (LIFO). Use o método append () pode adicionar um elemento para o topo da pilha. Sem um índice explícito do método pop () pode recuperar um item do topo da pilha. Por exemplo:

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

Use a lista como uma fila

A lista também pode ser usado como uma fila, a fila é o primeiro a se juntar os elementos, a primeira retirada, no entanto, tomar esta lista como o objetivo não é eficiente. Acrescentar no final dos elementos da lista ou pop-up de velocidade, no entanto, para inserir ou ejetar da velocidade da cabeça não é rápido (porque todos os outros elementos têm de passar um por um) na lista.

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

compreensões lista

compreensões lista fornecem uma maneira concisa para criar listas a partir da sequência. Algumas aplicações irão geralmente ser aplicada a cada elemento de uma sequência de operações, com o resultado que é obtido como elementos para gerar uma nova lista, ou criar sequências determinadas de acordo com as condições de determinação.

Cada compreensão de lista está depois para com uma expressão, então zero ou mais cláusulas for ou if. O resultado é uma lista gerada a partir do contexto para subsequente e, se de acordo com a expressão. Se você quer a fórmula de uma tupla, você deve usar parênteses.

Aqui vamos listar cada número por três, para obter uma nova lista:

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

Agora vamos jogar pequenos truques:

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

Aqui nós invocar um método individualmente para cada elemento em uma seqüência:

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

Podemos usar a cláusula if como um filtro:

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

Aqui estão algumas demos no ciclismo e outras habilidades:

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

compreensões lista pode usar expressões complexas ou funções aninhadas:

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

Nested compreensão da lista

As listas Python também pode ser aninhados.

O exemplo a seguir mostra a lista de matriz 3X4:

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

O exemplo a seguir lista matriz 3X4 a lista de conversão 4X3:

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

Os exemplos a seguir também pode usar os seguintes métodos:

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

Outro método:

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

del declaração

Você pode usar a instrução del pelo índice em vez de valor para remover um elemento de uma lista. Este é o uso de pop () retorna um valor diferente. Você pode usar a instrução del para remover um corte a partir da lista, ou limpar toda a lista (o nosso método anterior de apresentação é atribuído um corte para a lista vazia). Por exemplo:

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

Você também pode excluir a variável de instância com del:

>>> del a

Tuplas e sequências

número tupla de valores separados por vírgulas consiste, por exemplo:

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

Como você vê, na saída de tuplas são sempre envolvidas por parênteses, a fim de expressar adequadamente a estrutura aninhada. Não pode haver nenhum colchetes ou quando entrar, mas os suportes são geralmente necessários (se a tupla é parte de uma expressão maior).


definir

A coleção é uma coleção desordenada de elementos únicos. As características básicas incluem testes e eliminando elementos duplicados.

Você pode criar um conjunto de chaves ({}). Nota: Se você deseja criar um conjunto vazio, você deve usar o set () em vez de {}; o que cria um dicionário vazio, a próxima seção vamos introduzir esta estrutura de dados.

O que se segue é uma demonstração simples:

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

Colecção também suportam a derivação da fórmula:

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

dicionário

Outro tipo de dados útil construída em Python é o dicionário.

A sequência contínua de índice inteiro, e essa diferença é, dicionário indexado palavra-chave palavras-chave pode ser qualquer tipo imutável, geralmente com uma string ou numérico.

A melhor maneira de compreendê-lo como um dicionário são pares chave => valor não ordenadas. No mesmo dicionário, as teclas devem ser diferentes um do outro.

Um par de chaves cria um dicionário vazio: {}.

Este é um exemplo simples da utilização de um dicionário:

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

Construtor dict () para construir o dicionário diretamente da lista de key-tupla. Se você tem um padrão fixo, compreensões lista especificar uma determinada pares chave-valor:

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

Além disso, o dicionário pode ser usado para criar uma expressão para derivar qualquer dicionário de chaves e valores:

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

Se a palavra-chave é simplesmente uma seqüência de pares de valores-chave usando argumentos às vezes mais convenientes para especificar:

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

técnicas de passagem

Quando atravessando nos dicionários, o valor da chave e correspondente pode usar os itens () método de interpretação simultânea para fora:

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

Quando atravessando na seqüência, o índice de posição e valor correspondente pode ser usado enumerate () função também recebem:

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

Ao atravessar duas ou mais sequências, você pode usar o zip () em combinação:

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

Para percorrer uma sequência inversa, primeiro especificar a sequência, e depois chamar reversesd () função:

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

Atravessando uma sequência de acordo com a ordem, o uso da função ordenada () retorna uma sequência ordenada, não modifica o valor original:

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

Consulte a documentação