O Python tem um ótimo tipo de lista integrado chamado "list". Os literais de lista são escritos entre colchetes [ ]. As listas funcionam de forma semelhante às strings: use a função len() e colchetes [ ] para acessar os dados, com o primeiro elemento no índice 0. Consulte a documentação da lista de python.org oficial.
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 apontem para a lista na memória.
b = colors ## Does not copy the list
A "lista vazia" é apenas um par vazio de colchetes [ ]. O sinal "+" funciona para anexar duas listas, de modo que [1, 2] + [3, 4] resulta em [1, 2, 3, 4] (como + com strings).
FOR e IN
As construções *for* e *in* do Python são extremamente úteis. O primeiro uso delas que vamos ver é com listas. A construção *for*, for var in list
, é uma maneira fácil de analisar cada elemento de uma lista (ou outra coleção). Não adicione ou remova 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 o tipo de coisa que 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 forma fundamental de acompanhar o que está acontecendo. (isso está um pouco enganoso. Conforme você ganhar mais exposição ao Python, verá referências a dicas de tipo, que permitem adicionar dicas de digitação informações às suas definições de função. O Python não usa essas dicas de tipo quando é executado 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.)
A construção *in* é 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 você começa a iterar manualmente em uma coleção, em que, em Python, é preciso usar apenas "for/in".
Você também pode usar for/in para trabalhar em uma string. A string atua como uma lista de caracteres, então for ch in s: print(ch)
mostra todos os caracteres de 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 de for-loop e a função range() permite criar uma repetição numérica 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 toda a lista para casos sensíveis ao desempenho (em Python 3, range() terá o bom comportamento de desempenho e você pode esquecer de 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. Aqui está uma repetição "while" que acessa todos os três elementos de 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 outros métodos comuns de listagem.
- list.append(elem) -- adiciona um único elemento ao final da lista. Erro comum: não retorna a nova lista, apenas modifica o original.
- list.insert(index, elem) -- insere o elemento no índice especificado, deslocando os elementos para a direita.
- list.extend(list2) adiciona os elementos em list2 ao final da lista. Usar + ou += em uma lista é semelhante a usar extension().
- list.index(elem) -- procura o elemento especificado do início da lista e retorna seu índice. Lança um ValueError se o elemento não aparece (use "in" para verificar sem um ValueError).
- list.remove(elem) - procura a primeira instância do elemento especificado e a remove (gera ValueError se não estiver presente)
- list.sort(): classifica a lista no lugar (não a retorna). É preferível usar a função sort() mostrada depois.
- 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 (praticamente o oposto de anexe()).
Observe que esses são *métodos* em um objeto de lista, enquanto len() é uma função que usa a lista (ou string ou algo assim) como um 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, eles 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]
Criação da lista
Um padrão comum é iniciar uma lista como a lista vazia [] e, em seguida, usar anexar() ou estender() para adicionar elementos a ela:
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
Listar frações
Os Slices funcionam em listas, assim como nas strings, e também podem ser usados 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, teste os problemas em list1.py que não usam classificação (nos Exercícios básicos).