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
../_images/list1.png

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']
../_images/list2.png
  • 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