Listas de objetos e laço FOR em Python

Você vai se deparar com listas e coleções de objetos em praticamente todo software que for trabalhar. Está na hora de entender como elas funcionam em Python! Para isto será essencial aprender o laço for em Python. E como bônus vamos aprender a fazer a função count do Python na unha.

No post sobre meu primeiro software aprendemos sobre variáveis numéricas e strings. Também é possível guardar informações mais complexas em uma variável como uma coleção de números. A metáfora do guarda-volumes se aplica neste caso também, imagine que ao invés de guardar um chapéu você guarde várias gravatas. Para guardar coleções utilizamos listas em Python.

Lista de objetos em Python

Em Python podemos ter listas de números, strings e também de valores booleanos. Utilizamos o caractere [ e ] para indicar que estamos trabalhando com uma lista separando os elementos com vírgula.

lista_de_numeros = [4, 5, 9, 100]
lista_de_strings = ["academia", "hopper", "grace"]
lista_de_booleanos = [False, True, True, True, False]

E se você não sabe de antemão quais valores serão colocados na lista, por exemplo valores que o usuário envia. Então podemos criar uma lista vazia usando dois colchetes [] e depois adicionar itens a ela. Para adicionar utilizamos o comando append, este termo significa acrescentar em inglês.  

lista = []
lista.append(3)
lista.append(9)
lista.appgend(10)
print(lista) # [3, 9, 10]

Também é possível acessar qualquer valor da lista pelo seu índice. O índice das listas em Python começam em zero. Para acessar o primeiro elemento da lista utilizamos 0 (zero) para acessar o terceiro elemento utilizamos 2.

lista = [3, 9, 10]
lista[0] # 3
lista[1] # 9
lista[2] # 10

pessoas = ["Ana", "André", "Eliana"]
pessoas[0] # Ana
pessoas[1] # André
pessoas[2] # Eliana

E tem outra funcionalidade muito legal em Python em que você pode acessar uma parte da lista, do índice 2 ao 4 por exemplo. Ele te retorna uma lista dos 3 elementos do índice 2 ao 4. Há aqui uma pegadinha, pois é preciso passar para o python o índice inicial e o índice final + 1.  Se queremos os itens do índice 2 ao 4 devemos passar [2:5] , ou seja ele devolve até o índice anterior do que você pediu.

lista = [2, 4, 9, 3, 7, 10]
sub_lista = lista[2:5]
print(sub_lista) # [9, 3, 7]

Para saber quantos itens existem na lista, utilizamos a função len().

lista = [4, 7, 8, 9, 12]
len(lista) # 5

Também é possível inserir um item no meio da lista na posição que você deseja, os itens subsequentes serão empurrados para frente.

lista = [2, 4, 9, 3, 7, 10]
lista.insert(2, 200)
print(lista) # [2, 4, 200, 9, 3, 7, 10]

Nota-se que os itens dentro da lista não precisam ter ordem, mas e se quisermos organizá-los? Podemos utilizar a função sort(). É possível utilizar a função sort com números e strings.

lista = [2, 4, 9, 3, 7, 10]
lista.sort()
print(lista) # [2, 3, 4, 7, 9, 10]

nomes = ["Eliana", "Carlos", "Mariana", "Abigail", "abigail"]
nomes.sort()
print(nomes) # ["Abigail", "Carlos", "Eliana", "Mariana", "abigail"]

Como vimos no post sobre strings, a letra A é diferente da letra a e por este motivo a ordenação fica “errada”. É possível alterar este comportamento mas isto é assunto para outro post.

Como contar a quantidade de palavras em um texto

No post Dominando strings em Python vimos como utilizar a função count para contar as palavras de um texto. Vamos dar um passo além e criar nossa própria função de contagem.

split

Split significa dividir, e o que podemos fazer com essa função é separar o texto original em vários outros pedaços. Esta função recebe um parâmetro que é o caractere utilizado para dividir a a string.  Se quisermos separar a primeira parte de um CEP da segunda poderíamos fazer assim:

cep = "08923-007"
cep_em_partes = cep.split('-')
print(cep_em_partes[0]) #08923"
print(cep_em_partes[1]) #007

Note que o resultado não contém o caractere ‘-‘ ele é removido da lista resultante.  

Para separar um texto em palavras basta utilizar a função split passando um caractere vazio que representa os espaços em branco, o resultado será uma lista com todas as palavras.

texto1 = """A maioria das raças de cachorros foi criada pelo homem para servir a um propósito. Então os cachorros foram divididos em grupos. No Brasil, o CBKC divide os cães em 11 grupos."

palavras_texto1 = texto1.split(' ')

Como usar laço for em Python

Temos agora uma lista de palavras,  como podemos analisá-las? É impraticável acessar uma a uma utilizando o índice. Até mesmo por que queremos trabalhar com textos de diferentes tamanhos e não saberemos de antemão quantas palavras o texto terá.

É para este tipo de problema que existe o laço for. Com o for podemos navegar em uma coleção item a item até chegar no final. Veja abaixo a sintaxe:

for [variável item] in [lista]:
	[comando]

O código acima quer significa: para cada item na lista faça comando. O importante é notar que [variável item] é o nome que vamos dar à variável que vai guardar o valor retirado da lista a cada iteração. Para imprimir todas as palavras extraídas do texto1 podemos fazer:

for palavra in palavras_texto1:
  print(palavra)

Crie sua própria função de contar palavras

Agora que já sabemos navegar em cada palavra do texto podemos criar nossa própria função como aprendemos no post Variáveis numéricas em Python. Para isto criaremos uma variável contador onde guardaremos a contagem de palavra que nos interessa.

def contagem_palavras(texto, palavra):
  palavras = texto.split(' ')
  contador = 0

  for p in palavras:
    if p == palavra:
      contador += 1

  return contador

É muito provável que a função count do Python faça algo muito similar a esta função e agora sabemos como implementá-la em Python.

Versão final: https://repl.it/@julianajuliano/Listas