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:
Em Python são usados colchetes [ ] para definir uma lista.
# Uma lista de nomes.
convidados = ["Huguinho", "Zezinho", "Luizinho"]
print(convidados)
# Uma lista com alguns números primos
primos = [2, 3, 5, 7, 11, 13, 17]
print(primos)
# Uma lista pode ter valores de tipos distintos, assim como valores repetidos
l = ['João', 45, 8.15, 'Fortaleza', 45]
print(l)
# 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.
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
print(primos)
Outro operador "*" possibilita a construção de listas com valores repetidos e com tamanho fixo:
lista = [12] * 5
print(lista)
lista = ["abc"] * 7
print(lista)
[12, 12, 12, 12, 12] ['abc', 'abc', 'abc', 'abc', 'abc', 'abc', 'abc']
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.
l = ['João', 45, 8.15, 'Fortaleza', 45]
# Pegar o 1º elemento da lista
l[0]
# Pegar o último elemento da lista
l[-1]
# Pegar o 3º e o 4º elementos da lista (o segundo índice é exclusivo)
l[2:4]
# Pegar um pedaço da lista a partir do 2º elemento até o final
l[1:]
# Pegar um pedaço a partir do início até o 3º elemento (índice 2)
l[:3]
# Pegar todos os elementos de uma lista, exceto o último
l[:-1]
# 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
O comando 'for' pode ser utilizado para percorrer toda a lista ou parte dela, conforme exemplificado abaixo:
# Percorrer toda a lista, elemento a elemento
for item in l:
print(item)
# Percorrer um pedaço da lista (todos os elementos, exceto os últimos dois)
for item in l[:-2]:
print(item)
A comparação entre duas listas é feita elemento a elemento, da esquerda para a direita
# As listas abaixo são diferente pois o segundo elemento da primeira difere do segundo elemento da segunda
[78, 45, 33] != [78, 44, 33]
# 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]
Em Python há o operador in que permite verificar se um elemento pertence a uma sequência.
# Verificar se um determinado valor está na lista
l = ['João', 45, 8.15, 'Fortaleza', 45]
'Fortaleza' in l
# Verificar se um determinado valor não está na lista
if 'Maria' not in l:
l.append('Maria')
print(l)
Listas são objetos em Python, de forma que há métodos que possibilitam interagir com as listas:
# Obter o índice da primeira ocorrência de um elemento na lista
l = ['João', 45, 8.15, 'Fortaleza', 45]
l.index('Fortaleza')
# 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)
# Contar o número de vezes que um determinado objeto ocorre numa lista
l.count(45)
# 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
# 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:
# Obter e remover o último elemento da lista
ultimo = l.pop()
print(ultimo)
print(l)
# Obter e remover o 3º elemento da lista (índice 2)
item = l.pop(2)
print(item)
print(l)
l = [10, 9, 15, 7, 8]
x = l.reverse()
print(x)
# Inverter a ordem dos elementos na lista (a própria lista é alterada)
l = [10, 9, 15, 7, 8]
l.reverse()
print(l)
# Ordenar os elementos da lista em ordem cresencente (a própria lista é alterada)
l = [10, 7, 15, 1]
l.sort()
print(l)
# Ordenar os elementos da lista em ordem decrescente (a própria lista é alterada)
l.sort(reverse = True)
print(l)
Dada uma lista de valores, verificar se os valores estão em ordem crescente.
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)
Considere a tarefa de calcular o desvio padrão de uma sequência de números reais [x1, x2, ..., xn], dado por: . 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.
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.
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)