Listas (Lists)¶

Strings e Tuplas são exemplos de sequências em Python. Listas podem ser vistas como a forma mais genérica de sequências, uma vez que elas são mutáveis, ou seja, permite a inserção de novos elementos assim como a alteração e exclusão de elementos.

São exemplos típicos de listas:

  • lista de nomes de convidados para uma festa
  • lista de candidatos classificados num processo seletivo
  • lista de compras
  • lista de números primos

Em Python são usados colchetes [ ] para definir uma lista.

In [ ]:
# Uma lista de nomes.
convidados = ["Huguinho", "Zezinho", "Luizinho"]
print(convidados)
In [ ]:
# Uma lista com alguns números primos
primos = [2, 3, 5, 7, 11, 13, 17]
print(primos)
In [ ]:
# Uma lista pode ter valores de tipos distintos, assim como valores repetidos
l = ['João', 45, 8.15, 'Fortaleza', 45]
print(l)
In [ ]:
# Obter o tamanho (número de elementos) de uma lista
len(l)

A exemplo do que ocorre com strings, é possível utilizar o operador "+" para concatenar (justapor) tuplas.

In [ ]:
mais_primos = primos + [23, 29, 31]
print(mais_primos)

Note que a variável 'mais_primos' passa a denotar a nova lista resultante da concatenação, mas que as listas originais permanecem inalteradas

In [ ]:
print(primos)

Outro operador "*" possibilita a construção de listas com valores repetidos e com tamanho fixo:

In [1]:
lista = [12] * 5
print(lista)

lista = ["abc"] * 7
print(lista)
[12, 12, 12, 12, 12]
['abc', 'abc', 'abc', 'abc', 'abc', 'abc', 'abc']

Indexação de elementos¶

A exemplo de strings e tuplas, as listas são coleções ordenadas (a ordem dos elementos é importante) e indexadas (cada elemento pode ser referenciado por um índice iniciando em zero). O uso de índices permite operar facilmente com pedaços de uma lista, conforme exemplo abaixo.

lista

In [ ]:
l = ['João', 45, 8.15, 'Fortaleza', 45]
In [ ]:
# Pegar o 1º elemento da lista
l[0]
In [ ]:
# Pegar o último elemento da lista
l[-1]
In [ ]:
# Pegar o 3º e o 4º elementos da lista (o segundo índice é exclusivo)
l[2:4]
In [ ]:
# Pegar um pedaço da lista a partir do 2º elemento até o final
l[1:]
In [ ]:
# Pegar um pedaço a partir do início até o 3º elemento (índice 2)
l[:3]
In [ ]:
# Pegar todos os elementos de uma lista, exceto o último
l[:-1]
In [ ]:
# Pegar todos os elementos de uma lista em ordem inversa
l[::-1]
# Como o primeiro índice foi omitido, é assumido o início da lista
# Como o segundo índice foi omitido, é assumido o final da lista
# Como o incremento é -1, os valores são pegos em ordem invertida

Percorrimento de listas¶

O comando 'for' pode ser utilizado para percorrer toda a lista ou parte dela, conforme exemplificado abaixo:

In [ ]:
# Percorrer toda a lista, elemento a elemento
for item in l:
    print(item)
In [ ]:
# Percorrer um pedaço da lista (todos os elementos, exceto os últimos dois)
for item in l[:-2]:
    print(item)

Comparando listas¶

A comparação entre duas listas é feita elemento a elemento, da esquerda para a direita

In [ ]:
# As listas abaixo são diferente pois o segundo elemento da primeira difere do segundo elemento da segunda
[78, 45, 33] != [78, 44, 33]
In [ ]:
# A primeira lista é maior que a segunda pois o segundo elemento da primeira é maior que o segundo elemento da segunda
[78, 45] > [78, 44, 33]

Operador de pertinência¶

Em Python há o operador in que permite verificar se um elemento pertence a uma sequência.

In [ ]:
# Verificar se um determinado valor está na lista
l = ['João', 45, 8.15, 'Fortaleza', 45]
'Fortaleza' in l
In [ ]:
# Verificar se um determinado valor não está na lista
if 'Maria' not in l:
    l.append('Maria')
print(l)

Métodos sobre listas¶

Listas são objetos em Python, de forma que há métodos que possibilitam interagir com as listas:

In [ ]:
# Obter o índice da primeira ocorrência de um elemento na lista
l = ['João', 45, 8.15, 'Fortaleza', 45]
l.index('Fortaleza')
In [ ]:
# Obter o índice da primeira ocorrência de um elemento na lista a partir de uma determinada posição (índice 2 no exemplo)
l.index(45, 2)
In [ ]:
# Contar o número de vezes que um determinado objeto ocorre numa lista
l.count(45)
In [ ]:
# Adicionar um novo elemento no final da lista
l.append('último')
print(l)

Use o método insert para inserir um novo elemento em um dada posição da lista, deslocando todos os valores seguintes para o lado

In [ ]:
# Inserir um novo elemento na posição de índice 1
l.insert(1, 'segundo')

print(l)

Use o método pop to remover um item da lista. Por padrão é removido o último elemento da lista, mas é possível especificar o índice o elemento a ser removido:

In [ ]:
# Obter e remover o último elemento da lista
ultimo = l.pop()
print(ultimo)
print(l)
In [ ]:
# Obter e remover o 3º elemento da lista (índice 2)
item = l.pop(2)
print(item)
print(l)
In [ ]:
l = [10, 9, 15, 7, 8]
x = l.reverse()
print(x)
In [ ]:
# Inverter a ordem dos elementos na lista (a própria lista é alterada)
l = [10, 9, 15, 7, 8]
l.reverse()
print(l)
In [ ]:
# Ordenar os elementos da lista em ordem cresencente (a própria lista é alterada)

l = [10, 7, 15, 1]
l.sort()
print(l)
In [ ]:
# Ordenar os elementos da lista em ordem decrescente (a própria lista é alterada)
l.sort(reverse = True)
print(l)

Exemplo de verificação de ordem crescente¶

Dada uma lista de valores, verificar se os valores estão em ordem crescente.

In [ ]:
valores = [15, 18, 25, 25, 44, 98] # Uma lista de valores inteiro

v2 = valores.copy()
v2.sort()

valores == v2
print(valores)
print(v2)


           
estao_ordem_crescente = True # supõe que estejam em ordem crescente

for i in range(len(valores)-1):
    if valores[i+1] < valores[i]: # verifica a hipótese inicial
        estao_ordem_crescente = False
        break # para os testes pois encontrou um par de valores que nega a hipótese incial

print(estao_ordem_crescente)

Exemplo de cálculo de desvio padrão¶

Considere a tarefa de calcular o desvio padrão de uma sequência de números reais [x1, x2, ..., xn], dado por: desvio_padrao. Na primeira linha dos dados de entrada está o valor inteiro n, seguido do n valores reais, um em cada linha. O programa abaixo realiza esta tarefa.

In [ ]:
import math

n = int(input())
valores = list() # cria uma lista vazia (pode ser também:  valores = []  )
for _ in range(n):
    valores.append(float(input())) # acrescenta o valor lido no final da lista
    
media = sum(valores) / len(valores)

soma = 0
for x in valores: # percorre a lista, elemento a elemento
    soma += (x - media) ** 2

desvio_padrao = math.sqrt(soma / (len(valores) -1))
print(desvio_padrao)

O mesmo exemplo anterior pode ser escrito de forma mais sintética utilizando o mecanismo de "Compreensão de Lista" de Python conforme abaixo.

In [ ]:
import math

n = int(input())
valores = [float(input()) for _ in range(n)] # lê os valores um a um em linhas subsequentes e monta a lista de valores
    
media = sum(valores) / len(valores)
soma = sum((x - media) ** 2 for x in valores) # somatório dos quadrados das diferenças
desvio_padrao = math.sqrt(soma / (len(valores) -1))

print(desvio_padrao)