Listas em Python – Parte 1

Olá! Hoje falaremos um pouco mais sobre o Python e mais especificamente sobre listas. Uma vez que a aplicação delas na Inteligência Artificial é algo bem comum, seja na implantação de técnicas ou desenvolvimento algoritmos. Sua importância se deve ao fato de que esses algoritmos empregam fortemente o uso de estruturas de dados a fim de armazenar não somente uma informação, mas várias como por exemplo um conjunto de características de um determinado objeto.

Uma estrutura de dados permite armazenar e recuperar informações , dentre os tipos disponíveis em Python podemos citar: listas, arrays, tuplas, set, dicionários e o tipo tree. Em uma lista os valores são armazenados por uma sequência ordenada e finita, mutáveis e iteráveis. Ou seja, pode-se facilmente manipular e alterar os elementos de uma lista através de um índice que representa a posição dentro da lista. E o mais legal é que também podem ser armazenadas listas dentro listas, também chamadas de sublistas como veremos mais adiante. Tudo pronto!? Vamos lá!!

Criando listas

Uma lista pode conter zero ou mais itens que são separados por vírgulas, contendo no início e no fim o símbolo de colchetes [ ]. Podemos criar uma lista vazia de duas formas, conforme mostrado abaixo:

lista_vazia = []
segunda_lista_vazia = list()
print(lista_vazia)
[]
print(segunda_lista_vazia)
[]

Na primeira linha a lista é criada vazia e sem nenhum elemento utilizando apenas os colchetes, assim como, pode-se criar uma lista vazia a partir da classe list(), conforme mostra a linha 2. Nas linhas 3 e 4 é realizada a impressão através da função print(), a qual em ambos os casos o conteúdo apresentado é vazio, pois ainda não foi adicionado nenhum elemento. Além disso, a lista pode ser criada e inicializada com os devidos valores como mostra o código abaixo.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
print(meses)
['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho']

No exemplo acima na linha 1, a lista meses é criada e inicializada com alguns meses do ano e separados por virgula.

Todo elemento gravado em uma lista possui um índice que inicia com o valor zero e vai até o tamanho da lista. Ou seja, a lista meses contém 6 elementos e os valores dos índices correspondem a sequência de 0 até 5. No exemplo abaixo, para acessar o mês fevereiro digita-se o nome da lista seguida do número do índice, conforme mostra mostra a linha 2. E na linha 5, o mês de junho é acessado a partir do índice 5.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
print(meses[1])
fevereiro
print(meses[5])
junho

Caso seja digitado um valor que esteja fora do índice, será mostrada uma mensagem de erro exemplificada no código abaixo.

IndexError Traceback (most recent call last) in 
       1 meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
 ----> 2 print(meses[7])

Operações em listas

O Python disponibiliza algumas funções built-in para realizar as operações em uma lista, como alterar, incluir, excluir e pesquisar.

A função len() retorna o tamanho da lista, conforme o código abaixo.

len(meses)
6

Uma vez que o conceito de índices da lista foi compreendido, é possível começar a realizar algumas modificações na lista meses. O objetivo será atualizar o mês de junho por dezembro através do índice do mês em questão, que tem como valor 5 conforme mostra o exemplo abaixo.

meses[5] = 'dezembro'
print(meses)
['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'dezembro']

Se um valor de índice não for especificado ao atribuir um valor a lista, todo o conteúdo será sobrescrito e a lista passará a ser uma simples string.

meses = 'novembro'
print(meses)
novembro

Inserindo valores

No exemplo anterior todos os valores foram apagados, então é preciso tomar cuidado! Ou seja, quando se deseja adicionar um novo valor na lista utiliza-se o operador append(), o qual deve ser chamado através do nome da lista, seguido de .append(), conforme mostrado na linha 2 do código abaixo.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
meses.append('julho')
print(meses)
['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho']

O operador append() adiciona um novo elemento no final lista, conforme mostra a impressão da lista na linha 4. Outra possibilidade é a inserção de listas dentro de uma lista, criando as chamadas sublistas. Conforme mostrado no exemplo abaixo.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
meses.append(['julho','agosto'])
print(meses)
['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', ['julho', 'agosto']]
print(meses[6])
['julho', 'agosto']

Na linha 2 é adicionada uma nova lista contendo dois valores na lista meses através da operação de inserção. Em seguida, na linha 4 é realizada impressão na qual pode-se observar que além dos elementos iniciais foi gravado também a lista ['julho','agosto'] . Dessa forma, a lista passou a ser uma sublista sendo armazenada na posição 6 da lista meses como mostra a impressão nas linhas 5 e 6.


Uma outra forma de adicionar valores em uma lista é com a função insert(), porém nesse caso deve-se especificar o número do índice para qual se deseja gravar um novo mês.

meses.insert(2,'julho')
print(meses)
['janeiro', 'fevereiro', 'julho', 'março', 'abril', 'maio', 'junho']

O mês julho foi adicionado na posição 2 como mostra a linha 1 do código acima. Todos os outros elementos tiveram os valores movidos um índice acima. Logo, março que tinha como valor índice 2 passou a ser 3 e assim subsequentemente com os outros meses da lista.


Assim como, é possível combinar o conteúdo de duas listas através do comando extend(). Veja no exemplo abaixo como fica essa operação:

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
meses2 = ['julho', 'agosto']
meses.extend(meses2)
print(meses)
['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto']

O comando extend() mostrado na linha 3, mesclou o conteúdo das listas meses e meses2 formando uma única lista. Uma outra forma de realizar a mesma operação é com += conforme mostrado abaixo:

meses += meses2
print(meses)
['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto']

Excluindo valores

Uma outra operação necessária é a função de excluir um item da lista. O comando pop() remove o último item da lista se não for especificado o valor do índice, caso contrário será removido o item especificado no índice.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
meses.pop()
['janeiro', 'fevereiro', 'março', 'abril', 'maio']
meses.pop(3)
print(meses)
['janeiro', 'fevereiro', 'março', 'maio']

Na linha 2 o comando pop() é chamado e conforme mostra a impressão na linha 3, o mês junho foi removido. Na linha 4 é especificado que se deseja remover o mês abril, diferentemente da opção anterior a remoção ocorreu no item especificado e não apenas no final da linha.

No comando remove() deve ser especificado o valor que se deseja remover, no caso da lista meses, na linha 2 do código abaixo é passado como parâmetro o valor que esta no índice [0], ou seja, o mês janeiro.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
meses.remove('janeiro')
print(meses)
['fevereiro', 'março', 'abril', 'maio','junho']

Similarmente o comando del necessita de um índice para remover um item da lista. Entretanto é preciso tomar cuidado, pois se o índice não for informado a lista será deletada por completo. O comando del é exemplificado na linha 2 do código abaixo.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
del meses[3]
print(meses)
['janeiro', 'fevereiro','março','maio','junho']

Verificando valores em uma lista

O Python permite verificar se um determinado valor esta contido na lista retornando True, caso não esteja retorna False. No exemplo abaixo, é verificado se o mês de abril esta contido na lista meses, conforme mostram as linhas 2 e 3. Uma vez que não seja encontrado, o retorno False é mostrado na linha 5.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
'abril' in meses
True
'agosto' in meses
 False

Através do comando count() é possível verificar quantas vezes um determinado valor aparece na lista. No exemplo abaixo, é verificado quantas ocorrências do mês janeiro existem na lista meses na linha 2. Após a execução do comando, o retorno será um número inteiro, como mostra a linha 3.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
meses.count('janeiro')
1

Convertendo uma lista com o join()

O método join() é um método da classe string e através dele é possível converter uma lista em string definindo previamente o separador (linha 2), conforme mostrado abaixo:

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
separador = ';'
meses_juntos = separador.join(meses)
print(meses_juntos)
janeiro;fevereiro;março;abril;maio;junho

Perceba que o método (linha 3) iterou todos os itens da lista meses , separando cada um dos elementos com o ; passado anteriormente como parâmetro na linha 2. Na linha 5, é possível observar que a lista meses foi convertida em uma única string (meses_juntos) de valores separados por ponto e vírgula.


De modo contrário, se o objetivo é separar os elementos pode-se utilizar o comando split(). Utilizando o mesmo separador de exemplo do anterior, na linha 1 é criada a lista meses_separados, conforme a impressão realizada na linha 3 do exemplo abaixo.

meses_separados = meses_juntos.split(separador)
print(meses_separados)
['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho']

Ou seja, o retorno do método join é uma string e do método split() é uma lista, conforme mostrado abaixo:

type(meses_juntos)
str
type(meses_separados)
list

Ordenando os itens de uma lista

Provavelmente você já precisou ordenar uma conjunto de números, letras ou palavras ou vai precisar! O Python disponibiliza duas funções bem eficientes para essa tarefa, sorted e sort.


A função sorted() na linha 2 retorna uma cópia ordenada em ordem alfabética da lista, como mostra a impressão realizada na linha 4. Em seguida na linha 6, é realizada a impressão da lista meses novamente com a ordem original.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
sorted_meses = sorted(meses)
print(sorted_meses)
['abril', 'fevereiro', 'janeiro', 'junho', 'maio', 'março']
print(meses)
['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho']

A função sort() faz a ordenação dos valores e retorna uma lista já processada com essas alterações, conforme mostra impressão realizada na linha 4.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
meses.sort()
print(meses)
['abril', 'fevereiro', 'janeiro', 'junho', 'maio', 'março']

Se os itens da lista forem do tipo numérico, eles serão ordenados por padrão de forma ascendente, ou seja do menor para o maior. Caso sejam do tipo string, a ordem será de forma alfabética. Entretanto, caso deseje é possível realizar a ordenação ao contrário, como por exemplo: do maior para o menor ou de Z até A. Para isso é necessário especificar o parâmetro reverse=True, conforme mostra o código na linha 2 e a impressão na linha 4 do exemplo abaixo.

meses = ['janeiro', 'fevereiro','março','abril','maio','junho']
meses.sort(reverse=True)
print(meses)
['março', 'maio', 'junho', 'janeiro', 'fevereiro', 'abril']

Neste artigo vimos como criar uma lista, assim como realizar diversas operações com essa estrutura de dados. A importância das listas é tão grande que ela é considerada como uma das estruturas mãe das outras estruturas, apenas diferenciando as demais em algumas particularidades.

Leia mais sobre esse assunto em Listas em Python – Parte 2 .


Fontes pesquisadas

[1] Python Fluente: Programação Clara, Concisa e Eficaz – Luciano Ramalho [2] Python Para Análise de Dados: Tratamento de Dados com Pandas, NumPy e IPython – Wes McKinney, Lúcia A. Kinoshita [3] Python: Guia prático do básico ao avançado (Cientista de dados Livro 2) – F. V. C. Santos, Rafael.