O Python tem um ótimo tipo de lista integrado chamado "list". Os literais de lista são escritos entre colchetes [ ]. As listas funcionam de maneira semelhante às strings. Use a função len() e colchetes [ ] para acessar dados, com o primeiro elemento no índice 0. Consulte os documentos oficiais da lista do python.org.
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
A atribuição com um = nas listas não faz uma cópia. Em vez disso, a atribuição faz com que as duas variáveis aponte para a mesma lista na memória.
b = colors ## Does not copy the list
A "lista vazia" é apenas um par vazio de colchetes [ ]. O "+" funciona para anexar duas listas, então [1, 2] + [3, 4] gera [1, 2, 3, 4] (é igual a + com strings).
FOR e IN
Os construtos *for* e *in* do Python são extremamente úteis, e o primeiro uso deles que vamos mostrar é com listas. O construtor *for* (for var in list
) é uma maneira fácil de analisar cada elemento de uma lista (ou outra coleção). Não adicione nem remova itens da lista durante a iteração.
squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print(sum) ## 30
Se você souber que tipo de coisa está na lista, use um nome de variável no loop que capture essas informações, como "num", "name" ou "url". Como o código Python não tem outra sintaxe para lembrar os tipos, os nomes das variáveis são uma maneira importante de manter o controle do que está acontecendo. (isso está um pouco enganoso. À medida que você se familiarizar mais com o Python, vai encontrar referências a dicas de tipo, que permitem adicionar informações de digitação às definições de função. O Python não usa essas dicas de tipo quando executa seus programas. Elas são usadas por outros programas, como ambientes de desenvolvimento integrado (IDEs, na sigla em inglês) e ferramentas de análise estática, como linters/verificadores de tipo, para validar se as funções são chamadas com argumentos compatíveis.
O construtor *in* sozinho é uma maneira fácil de testar se um elemento aparece em uma lista (ou outra coleção). value in collection
testa se o valor está na coleção, retornando "True"/"False".
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
As construções for/in são muito usadas no código Python e trabalham em outros tipos de dados além da lista, portanto, basta memorizar a sintaxe. Você pode ter hábitos de outras linguagens em que começa a iterar manualmente uma coleção, mas, no Python, é preciso usar for/in.
Você também pode usar for/in para trabalhar com uma string. A string funciona como uma lista de caracteres, então for ch in s: print(ch)
imprime todos os caracteres em uma string.
Intervalo
A função range(n) gera os números 0, 1, ... n-1, e range(a, b) retorna a, a+1, ... b-1 -- até o último número, mas sem incluí-lo. A combinação do laço for e da função range() permite criar um laço numérico tradicional:
## print the numbers from 0 through 99 for i in range(100): print(i)
Há uma variante xrange() que evita o custo de criar a lista inteira para casos sensíveis à performance. No Python 3, a função range() tem um bom comportamento de performance, e você pode esquecer a xrange().
Repetição while
O Python também tem a repetição padrão, e as instruções *break* e *continue* funcionam como em C++ e Java, alterando o curso do loop mais interno. As repetições "for/in" acima resolvem o caso comum de iteração de cada elemento de uma lista, mas a repetição "while" oferece controle total sobre os números do índice. Confira um loop while que acessa cada terceiro elemento em uma lista:
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
Listar métodos
Confira alguns outros métodos de lista comuns.
- list.append(elem): adiciona um único elemento ao final da lista. Erro comum: não retorna a nova lista, apenas modifica a original.
- list.insert(index, elem) -- insere o elemento no índice especificado, deslocando os elementos para a direita.
- list.extend(list2) adiciona os elementos da lista2 ao final da lista. Usar + ou += em uma lista é semelhante a usar extend().
- list.index(elem): pesquisa o elemento especificado desde o início da lista e retorna o índice dele. Lança um ValueError se o elemento não aparece (use "in" para verificar sem um ValueError).
- list.remove(elem): pesquisa a primeira instância do elemento fornecido e a remove (gera um ValueError se não estiver presente).
- list.sort(): classifica a lista no lugar (não a retorna). A função sorted() mostrada mais adiante é a preferida.
- list.reverse(): inverte a lista no local (não a retorna)
- list.pop(index) - remove e retorna o elemento no índice especificado. Retorna o elemento mais à direita se o índice for omitido (aproximadamente o oposto de append()).
Eles são *métodos* em um objeto de lista, enquanto len() é uma função que usa a lista (ou string ou qualquer outra coisa) como argumento.
list = ['larry', 'curly', 'moe'] list.append('shemp') ## append elem at end list.insert(0, 'xxx') ## insert elem at index 0 list.extend(['yyy', 'zzz']) ## add list of elems at end print(list) ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz'] print(list.index('curly')) ## 2 list.remove('curly') ## search and remove that element list.pop(1) ## removes and returns 'larry' print(list) ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']
Erro comum: os métodos acima não *retornam* a lista modificada, apenas modificam a lista original.
list = [1, 2, 3] print(list.append(4)) ## NO, does not work, append() returns None ## Correct pattern: list.append(4) print(list) ## [1, 2, 3, 4]
List Build Up
Um padrão comum é começar uma lista como a lista vazia [] e usar append() ou extend() para adicionar elementos a ela:
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
Listar fatias
As fatias funcionam em listas da mesma forma que com strings e também podem ser usadas para mudar subpartes da lista.
list = ['a', 'b', 'c', 'd'] print(list[1:-1]) ## ['b', 'c'] list[0:2] = 'z' ## replace ['a', 'b'] with ['z'] print(list) ## ['z', 'c', 'd']
Exercício: list1.py
Para praticar o material desta seção, tente resolver os problemas em list1.py que não usam classificação (nos Exercícios básicos).