Aprenda Python

  • Página Inicial
  • Contato!
  • Tudo sobre Python Parte 1!
  • Tudo sobre Python Parte 2!
  • Tudo sobre Python Parte 3!
  • Tudo sobre Python Parte 4!
  • Tudo sobre Python Parte 5!
  • Tudo sobre Python Parte 6!
  • Tudo sobre Python Parte 7!
  • Tudo sobre Python Parte 5

    Listas - Parte 1

    Como visto anteriormente, ficamos sabendo que as tuplas são variáveis compostas que usamos para guardar vários dados. Por exemplo, colocamos uma tupla lanche dessa forma:

    
    lanche = ("hambúrguer", "suco", "pizza", "pudim")
    print(lanche[2]) # Exibirá a pizza
    
    

    Mas se criarmos uma nova atribuição à qualquer posição da tupla, ele não aceitará, pelo fato da tupla ser imutável.

    Nesse caso usamos as listas, que podem ser modificadas, dessa forma:

    
    lanche = ["hambúrguer", "suco", "pizza", "pudim"]
    lanche[3] = "picolé"
    print(lanche)
    
    

    Visualmente, a diferença é que a lista usa colchetes, enquanto a tupla usava parênteses. Na verdade, as listas são mais próximas aos arrays em outras linguagens.

    PS: Nas listas também podemos colocar variáveis de diferentes tipos na mesma lista.

    Só que para adicionar um novo item à lista, usamos métodos do objeto de lista, o append() para colocar itens no final, e o insert() para colocar numa posição especifica, por exemplo:

    
    lanche = ["hambúrguer", "suco", "pizza", "pudim"]
    lanche[3] = "picolé"
    lanche.append("cookie") # Adiciona uma nova posição no final
    lanche.insert(0, "cachorro-quente") # Adiciona o item na posição especificada
    print(lanche)
    
    

    E para excluir um elemento, podemos usar del, pop ou remove, dessas formas:

    
    del lanche[3] # del() é usado para excluir objetos
    lanche.pop(3) # pop() exclui o último elemento quando não tem parâmetro de índices
    lanche.remove("pizza") # remove() exclui pelo nome do item
    
    

    PS: O pop() é usado pra remover o último item da lista, mas pode receber como parâmetro a posição do índice. Sem parâmetros, ele remove o último item da lista.

    Podemos usar um if para verificar se existe um item:

    
    lanche = ["hambúrguer", "suco", "pizza", "pudim"]
    lanche[3] = "picolé"
    if "pizza" in lanche:
        lanche.remove("pizza")
    print(lanche)
    
    

    Assim como as tuplas, podemos também fazer o fatiamento, onde ele mostra apenas parte dos elementos da lista, assim:

    
    lanche = ["hambúrguer", "suco", "pizza", "pudim"]
    print(lanche[0:2])
    
    

    PS: No caso acima, ele não mostrará o elemento 2, e sim parará nesse elemento, no caso ele exibe os elementos 0 e 1 (hambúrguer e suco).

    Temos também outros tipos de fatiamento assim:

    
    lanche = ["hambúrguer", "suco", "pizza", "pudim"]
    print(lanche[1:]) # Mostra do elemento 1 até o final
    print(lanche[-1]) # Mostra o último elemento, se for -2 é o penúltimo e etc.
    
    

    Podemos também usar o list() para criar listas, e usar um range() para preencher ela, veja um exemplo onde ele é usado:

    
    valores = list(range(4, 11)) # Preenche a lista com valores de 4 até 10, não confunda com as posições
    
    print(valores)
    
    

    Podemos também ordenar os valores numéricos de um array com o método sort(), assim:

    
    valores = [8, 2, 5, 4, 9, 3, 0]
    valores.sort()
    print(valores)
    
    

    PS: Pra ordenar em ordem inversa, passe um parâmetro no sort(), assim:

    
    valores.sort(reverse = True)
    
    

    Podemos usar também o len() pra retornar a quantidade de índices da lista:

    
    len(valores)
    
    

    E normalmente, podemos utilizar outros elementos assim:

    
    print(valores.count(5))
    print(valores.index(2))
    
    

    O método count, só lembrando, ele conta quantas vezes determinado elemento aparece numa variável composta. O index mostra a posição da primeira ocorrência do elemento.

    Se tentarmos mudar uma tupla o valor de índice de uma tupla, ela dará erro, por exemplo:

    
    num = (2, 5, 9, 1) # Tupla
    
    num[2] = 3 # Dará Erro
    
    print(num)
    
    

    Mas uma lista podemos mudar normalmente, dessa forma:

    
    num = [2, 5, 9, 1] # Lista
    
    num[2] = 3
    
    print(num)
    
    

    Só que, diferente dos arrays em outras linguagens como o PHP e Javascript, não podemos adicionar valores dessa forma:

    
    num = [2, 5, 9, 1]
    
    num[2] = 3
    num[4] = 7 # Dará Erro
    
    print(num)
    
    

    Nesse caso, usamos o append(), assim:

    
    num = [2, 5, 9, 1]
    
    num[2] = 3
    num.append(7)
    
    print(num)
    
    

    E podemos ordenar tudo depois com o sort():

    
    num = [2, 5, 9, 1]
    
    num[2] = 3
    num.append(7)
    
    num.sort()
    
    print(num)
    
    

    Podemos também reverter o sort(), inserir um valor novo numa posição (no caso a 2) com o insert() e exibir os elementos dela com o len(), assim:

    
    num = [2, 5, 9, 1]
    
    num[2] = 3
    num.append(7)
    
    num.sort(reverse = True)
    
    num.insert(2, 0) # Valor 0 na posição 2
    
    print(num)
    print(f"Essa lista tem {len(num)} valores.")
    
    

    E eliminando valores também, com o pop():

    
    num = [2, 5, 9, 1]
    
    num[2] = 3
    num.append(7)
    
    num.sort(reverse = True)
    
    num.insert(2, 0) # Valor 0 na posição 2
    
    num.pop() # Remove o último
    num.pop(2) # Remove o valor da posição 2
    
    print(num)
    print(f"Essa lista tem {len(num)} valores.")
    
    

    Também podemos usar o remove() pra remover procurando pelo conteúdo:

    
    num.remove(2)
    
    

    PS: Ele só remove o primeiro elemento encontrado, caso tenha mais um 2 na lista, ele não eliminará os outros, apenas o primeiro. Mas podemos usar um laço para remover todos, por exemplo:

    
    for i in range(0, len(num)):
        if 2 in num:
            num.remove(2)
    
    

    Além disso, podemos usar as condições para ele verificar se existe um elemento, por exemplo:

    
    num = [2, 5, 9, 1, 2, 2, 2]
    
    num[2] = 3
    num.append(7)
    
    num.sort(reverse = True)
    
    num.insert(2, 0) # Valor 0 na posição 2
    
    if 4 in num:
        num.remove(4)
    else:
        print("Não Achei o Número 4!")
    
    print(num)
    
    

    Basicamente, uma lista vazia pode ser criada dessas duas formas:

    
    valores = []
    valores = list()
    
    

    Podemos mudar a exibição dos valores, assim:

    
    valores = []
    
    valores.append(5)
    valores.append(9)
    valores.append(4)
    
    for v in valores:
        print(f"{v}...", end="")
    
    

    Ou usando o enumerate, que pega os valores das posições da lista:

    
    valores = list()
    
    valores.append(5)
    valores.append(9)
    valores.append(4)
    
    for c, v in enumerate(valores):
        print(f"Na posição {c} encontramos o valor {v}!")
    
    

    Podemos ler valores do teclado também, assim:

    
    valores = list()
    
    for cont in range(0, 5):
        valores.append(int(input("Digite um valor: ")))
    
    print("\n")
    
    for c, v in enumerate(valores):
        print(f"Na posição {c} encontramos o valor {v}!")
    
    

    Para excluir todos os itens de uma lista, use o método clear(), assim:

    
    valores.clear()
    
    

    Podemos atribuir o conteúdo de uma lista a outra, assim:

    
    a = [2, 3, 4, 7]
    b = a
    
    b[2] = 8
    
    print(f"Lista A: {a}")
    print(f"Lista B: {b}")
    
    

    Só que tem um detalhe, nesse método acima, ele faz uma ligação, e altera tanto o valor da mesma posição na lista a quanto da b.

    Para simplesmente copiar uma lista sem ligação, coloque um [:] depois da variável da lista a ser copiada, por exemplo:

    
    a = [2, 3, 4, 7]
    b = a[:]
    
    b[2] = 8
    
    print(f"Lista A: {a}")
    print(f"Lista B: {b}")
    
    

    Uma maneira muito elegante de criar uma lista é usando a list comprehension. Também chamada de listcomp, é uma forma pythônica de criar uma lista com uso de um objeto iterável.

    Esse tipo de técnica é utilizado quando, dada uma sequência, deseja-se criar uma nova sequência, porém com as informações originais transformadas ou filtradas por um critério.

    Os comandos for-in são obrigatórios.

    As variáveis item e lista dependem do nome dado no programa. Veja um exemplo de sintaxe utilizando a listcomp:

    
    print([2 * x for x in range(10)])
    
    

    Listas - Parte 2

    Como sabemos, uma lista é mutável, e ela é declarada assim:

    
    dados = list()
    
    

    Sabemos também que usamos o append() para adicionar elementos, independente do tipo delas:

    
    dados.append("Sérgio")
    dados.append(25)
    
    

    E também sabemos que um print com o índice do elemento da lista, assim:

    
    print(dados[0])
    print(dados[1])
    
    

    Mas vamos aprender um novo método de copiar estruturas de listas, no caso, a estrutura toda, fazemos dessa forma:

    
    pessoas = list()
    pessoas.append(dados[:])
    
    

    Nesse caso, quando colocamos apenas os dois pontos dentro dos colchetes, ele copia toda a lista e coloca dentro dessa lista (ou seja, uma lista dentro de outra).

    PS: Lembre do método de fatiamento de elementos usando os dois pontos, como já fizemos em strings, por exemplo.

    E da mesma forma, podemos colocar outros elementos em outros índices da lista pessoa.

    Podemos fazer também dessa forma:

    
    pessoas = [["Sérgio", 25], ["Maria", 19], ["João", 32]]
    
    

    Pode ver que esse negócio de listas compostas é bem parecido com as matrizes de outras linguagens de programação.

    Dessa forma, para exibir, usamos dois índices, o índice da lista "de fora" primeiro e a "de dentro" depois:

    
    print(pessoas[0][0])
    print(pessoas[1][1])
    print(pessoas[2][0])
    
    

    Se dermos apenas um índice para exibição, ele vai entender que o índice é a lista externa, e tudo que tiver dentro desse índice será exibido (no caso, a lista interna dentro dele):

    
    print(pessoas[1])
    
    

    Vamos considerar um programa onde declaramos uma lista simples, e adicionamos um nome e um número:

    
    teste = list()
    
    teste.append("Gustavo")
    teste.append(40)
    
    print(teste)
    
    

    E criaremos uma outra lista, denominada galera, que recebera dentro dela a lista teste:

    
    teste = list()
    
    teste.append("Gustavo")
    teste.append(40)
    
    galera = list()
    galera.append(teste)
    
    print(galera)
    
    

    Dessa forma, criamos uma lista composta.

    Só que tem um detalhe, caso mudemos os elementos da lista teste (a interna) e depois damos outro append, ele mudará o elemento nas duas posições da lista galera, como podem ver:

    
    teste = list()
    
    teste.append("Gustavo")
    teste.append(40)
    
    galera = list()
    galera.append(teste)
    
    teste[0] = "Maria"
    teste[1] = 22
    
    galera.append(teste)
    
    print(galera)
    
    

    Isso nós já vimos anteriormente, porque as duas listas criam uma ligação através do append, por isso, é necessário colocar os colchetes com os dois pontos pra copiar a lista completamente.

    
    teste = list()
    
    teste.append("Gustavo")
    teste.append(40)
    
    galera = list()
    galera.append(teste[:])
    
    teste[0] = "Maria"
    teste[1] = 22
    
    galera.append(teste[:])
    
    print(galera)
    
    

    No caso acima sim, dá certo.

    Essa é uma forma de declaração de listas compostas, e também as formas de exibir a mesma:

    
    galera = [["João", 19], ["Ana", 33], ["Joaquim", 13], ["Maria", 45]]
    
    print(galera) # Exibe a lista composta toda
    print(galera[0]) # Exibe a lista dentro do índice 0 da galera.
    print(galera[0][0]) # Exibe o primeiro item do índice 0 da galera.
    
    

    Podemos usar laços for para exibir as listas:

    
    galera = [["João", 19], ["Ana", 33], ["Joaquim", 13], ["Maria", 45]]
    
    for p in galera:
        print(p)
        
    print("")
    
    for p in galera:
        print(p[0])
    
    

    Incluindo for aninhado:

    
    galera = [["João", 19], ["Ana", 33], ["Joaquim", 13], ["Maria", 45]]
    
    for l in range(0, 4):
        for c in range(0, 2):
            if c < 2 - 1:
                print(galera[l][c], end=" ")
            else:
                print(galera[l][c])
    
    

    Podemos também fazer assim, onde galera tem dados da lista dado dentro:

    
    galera = list()
    dado = list()
    
    for c in range(0, 5):
        dado.append(str(input("Nome: ")))
        dado.append(int(input("Idade: ")))
        galera.append(dado[:])
        dado.clear()
    
    print(galera)
    
    

    PS: Não esqueça do índice com dois pontos para copiar.

    Veja o programa acima com mais recursos:

    
    galera = list()
    dado = list()
    mai = men = 0 # Atribuição dupla, só permitida em variáveis simples.
    
    for c in range(0, 5):
        dado.append(str(input("Nome: ")))
        dado.append(int(input("Idade: ")))
        galera.append(dado[:])
        dado.clear()
    
    for p in galera:
        if p[1] >= 18:
            print(f"{p[0]} é maior de idade!")
            mai += 1
        else:
            print(f"{p[0]} é menor de idade!")
            men += 1
    
    print(f"\nTemos {mai} maiores e {men} menores.")