Listas Python¶
Listas Python¶
O Python tem um ótimo tipo embutido de listas chamado list. As declarações de listas são escritas entre colchetes []. Listas funcionam de maneira similar aos strings, podemos usar a função len() e acessar informações através de []. Com o primeiro elemento iniciado por 0. (Veja a documentação oficial)
colors = ['red', 'blue', 'green']
print colors[0] ## red
print colors[2] ## green
print len(colors) ## 3

Atribuições com = em listas não criam cópias. Ao invés disso são criadas duas váriáveis apontando para a mesma lista em memória.
>>> colors = ['red', 'blue', 'green']
>>> b=colors
>>> b[0]= 'black'
>>> colors
['black', 'blue', 'green']

- Uma lista vazia é apenas uma par de colchetes [].
- O ‘+’ funciona ao adicionar duas listas:
>>> a = []
>>> a
[]
>>> a = ['red']
>>> z = ['blue', 'black']
>>> a + z
['red', 'blue', 'black']
FOR e IN¶
- As declarações Python for e in são extremamente úteis. A palavra reservada for
- – for var in list – é a maneira mais fácil de percorrer os elementos de uma lista ( ou uma coleção ). Não adicione ou remova itens de um iterável durante uma iteração.
squares = [1, 4, 9, 16]
sum = 0
for num in squares:
sum += num
print sum ## 30
Se você sabe o que procurar em uma lista, use o nome da variável no loop para capturar a informação desejada, como um “num”, um “nome” ou uma “url”.
O termo ‘in” é uma forma simples de testar se um elemento aparece em uma lista, retornando True/False.
list = ['larry', 'curly', 'moe']
if 'curly' in list:
print 'yay'
Os termos for/in são muito utilizados em Python ao trabalhar com dados que não sejam listas, então você deve memorizar sua sintaxe. Você pode ter o hábito vindo de outras linguagens de iniciar manualmente as iterações em uma coleção, em python você deve usar apenas for/in.
Você pode também usar for/in para trabalhar com uma string. Uma string atua como uma lista com chars, então:
for ch in 'treinamento':
print ch
Range¶
A função range(n) produz uma lista de números 0, 1, ..., n-1 e range(a,b) retorna a, a+1, ... b-1 – até o último número menos um. A combinação de um for-loop e o método range() permitem criarmos o for numérico tradicional.
## print the numbers from 0 through 99
for i in range(100):
print i
While Loop¶
O Python também tem um laço while, e declarações de break and continue como em C++ e Java, que alteram o curso do laço mais próximo.
Os laços anteriores com laços for/int resolvem os casos mais comuns de iteração através de cada elemento de uma lista, já o loop while permite controle total dos índices.
Segue um loop while que acessa cada 3º elemento de uma lista:
## Access every 3rd element in a list
i = 0
while i < len(a):
print a[i]
i = i + 3
List Methods¶
Alguns métodos comuns de listas:
list.append(elem) # adiciona um único elemento no final de uma lista
# Erro comum: não retorna a nova lista, apenas modifica a original
list.insert(index, elem) # insere um elemento em um determinado index
# movendo elementos para a direita.
list.extend(list2) # adiciona os elementos da lista2 no final da lista
# Usar + ou += em um lista temos um comportamento similiar ao extend().
list.index(elem) # Procura por um elemento a partir do início da lista
# retornando seu índice; Lança uma exceção do tipo ValueError se o
# elemento não existir (utilize "in" para realizar a verificação s/ um ValueError).
list.remove(elem) # Busta pelo primeiro elemento dado e o remove
# (throws ValueError if not present)
list.sort() # ordena uma lista in place (não retorna a mesma).
# (A função sorted() é preferível;)
list.reverse() # reverte a lista in place (não retorna a mesma)
list.pop(index) # remove e retorna um elemento de um determinado index.
# Se o index for omitido retorna o elemento mais a direita.
Existem métodos que recebem uma lista como argumento, como por exemplo o len()
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: Note que 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 de listas¶
Um padrão comum é iniciar uma lista com um par de colchetes vazios [], então usar append() ou extend() para adicionar elementos:
list = [] ## Start as the empty list
list.append('a') ## Use append() to add elements
list.append('b')
Fatiamento de Listas¶
Fatiamentos funcionam com listas da mesma forma que strings, e podem ser usados para modificar sub-partes de uma 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 praticarmos o material desta sessão, tente os problemas do arquivo list1.py que não usam ordenação (nos exercícios básicos).
Download do Arquivo: list1.py
Exercício A: match-ends
# Dada uma lista de strings, retorne a quantidade de strings
# cujo tamanho seja 2 ou maior e seu primeiro e último
# caracter sejam iguais.
# Obs: Python não possui o operador ++, mas += funciona