Python/Conceitos básicos/Estrutura de dados
Em Python existem dois tipos de estruturas de dados:
- Sequências: são objetos ordenados e finitos
- Dicionários é um conjunto de elementos de mapeamentos indexados por chaves.
As sequências imutáveis são as strings e as tuplas, dois ou mais elementos de qualquer tipo dentro de parênteses e separados por vírgula.
Exemplo de sequência com strings:
>>> nome = 'leonardo' >>> len(nome) 8 >>> nome.capitalize() 'Leonardo' >>> nome.upper() 'LEONARDO' >>> nome 'leonardo' >>>
Dicionários
Dicionário é o outro tipo de sequência que associam objetos. São separados por vírgulas e delimitados por chaves e associados por dois-pontos.
>>> dic = {1:'mar', 2:'oceano', 3:'rio'} >>> len(dic) 3 >>> dic.items() [(1, 'mar'), (2, 'oceano'), (3, 'rio')] >>> dic.keys() [1, 2, 3] >>> dic.values() ['mar', 'oceano', 'rio']
Listas
As sequências mutáveis são as listas. Listas são elementos entre colchetes e separados por vírgula. Em outras linguagens chamadas de vetor.
>>> lista = [1,2,3] >>> lista2 = [3,4,5] >>> lista.extend(lista2) >>> lista [1, 2, 3, 3, 4, 5] >>> len(lista) 6 >>> lista.reverse() >>> lista [5, 4, 3, 3, 2, 1] >>> lista.sort() >>> lista [1, 2, 3, 3, 4, 5] >>>
Construção de listas
Existem várias formas de gerar listas de números. A mais simples é a função range, que gera uma lista de zero a n-1:
>>> range(5) [0, 1, 2, 3, 4] >>>
Para gerar uma lista que comece em um ponto arbitrário, passar este ponto como o início da lista:
>>> range(10, 13) [10, 11, 12] >>>
Caso o valor inicial seja maior ou igual ao valor final, a lista é vazia; listas decrescentes, ou listas que tenham um passo diferente de um podem ser geradas com um terceiro parâmetro:
>>> range(5, 0) [] >>> range(10, 6, -2) [10, 8] >>>
Uma forma curiosa de gerar estas listas é construir o objeto xrange; na prática, fazer um loop com xrange ou com range dá o mesmo resultado; para mais detalhes, consulte o help (help(xrange)):
for indice in xrange(1, 6): print indice
Operações com listas
Listas podem ser unidas, através de extend. Como a lista é um objeto, usa-se a forma lista.extend(lista2):
>>> lista1 = range(2) >>> lista2 = range(2, 4) >>> lista1.extend(lista2) >>> lista1 [0, 1, 2, 3]
Listas também podem ser replicadas, usando-se *. Note que esta operação é comutativa:
>>> [1, 2] * 3 [1, 2, 1, 2, 1, 2] >>> 3 * [1, 2] [1, 2, 1, 2, 1, 2] >>>
Pilhas
Agora você deve estar se perguntando: "Sim, mas Python só oferece essas Estruturas de Dados?" Você pode não ter reparado, mas podemos utilizar as listas nativas do Python para trabalharmos com outras estruturas, como Pilhas, Filas, Árvores, Listas de Prioridades(Heaps), etc...
Utilizando as listas como Pilhas: Pilhas nada mais são do que listas em que a inserção e a remoção de elementos acontece na mesma extremidade.
>>> pilha = [10, 20, 30] >>> pilha.pop() 30 >>> pilha [10, 20] >>> pilha.append(50) >>> pilha [10, 20, 50] >>> pilha.append(100) >>> pilha.pop() 100 >>> pilha.pop() 50 >>> pilha [10, 20] >> len(pilha) 2
Utilizando as listas como Filas: