DEV Community

sarah de oliveira santana
sarah de oliveira santana

Posted on

Python #2 : estrutura de dados - listas

Esse post faz parte dos meus cadernos pessoais de estudos. Todas as anotações são baseadas nas aulas da Mentorama - Cientista de Dados do zero e organizadas sob o meu ponto de vista. M2A3.


Estrutura de Dados em Python

Definição: Coleções de dados com características específicas

Listas

Mutáveis, vários tipos.
Existe um espaço na memória para cada valor da lista.


Criar lista:

Usamos [ ] e separamos os valores por ,

lista_nomes = ['Annie', 'Elias', 'Sarah', 'San']
type(lista_nomes)
list

Essa lista era de nomes, então tinham só variáveis no formato string. Agora vamos criar uma com vários tipos de variáveis.

lista_varios_tipos = [1,2, True, [3,4,5]]
veja que em [3,4,5] foi colocada uma lista dentro da lista.

se você pedir o tipo
type(lista_varios_tipos)
vai retornar list também.

Dá pra retornar uma lista vazia também, só deixando os colchetes vazios [ ]

  • Para visualizar os elementos da lista: print
    print(lista_nomes)

  • Para contar o número de elementos numa lista: len
    print(len(listanomes))

  • Para acessar os elementos da lista:

A indexação no python começa em zero. Então o 1° elemento estará sempre na posição 0. O 2° elemento será o 1.

No exemplo da lista_varios_tipos = [1,2, True, [3,4,5]]
a indexação será:
0 = 1
1 = 2
2 = True
3 = [3,4,5](aqui ele retorna a lista inteira que está inserida]

Se você quiser saber algum elemento da lista que é outro elemento, tem que botar as indexações em ordem assim:

lista_varios_tipos[3][1]

ou seja: o index [3] é a lista [3,4,5], e o [1] é o segundo elemento de dentro dessa lista 4

  • para "fatiar" uma lista, ou seja, acessar apenas uma parte dela. função chamada slicing

na lista_nomes = [Annie, Elias, Sarah, San]

se eu pedir um slicing, ele será sempre ABERTO a direita e FECHADO a esquerda, o último elemento do index não vai aparecer.

lista_nomes = [0:2]
vai retornar
Annie, Elias
que pode ser simplificado por lista_nomes = [:2]
seria tipo um "até dois".

também é possível consultar "de trás para frente" usando uma posição negativa

lista_nomes = [-1]

vai retornar San que é o último elemento da lista
lista_nomes = [-2]retorna Sarah que é o penúltimo


Strings VS. Listas

Dentro de uma lista, um elemento string também é visto como uma sequência de caracteres.

Assim como fizemos em lista_varios_tipos[3][1] que retornou o segundo elemento de lista [3], conseguimos fazer com uma variável string.

Em lista_nomes[0] retorna "Annie"
Se eu colocar lista_nomes[0][3]
ele vai me retornar o 4º elemento da string "Annie"ou seja
lista_nomes[0][3]
"i"

Alterar valores em lista

Vamos supor que a 'Annie' agora quer usar seu segundo nome, 'Carol'

lista_nomes[0] = Carol

quando eu rodar lista_nomes ele vai retornar
'Carol', 'Elias', 'Sarah', 'San'

  • mas a String é imutável

eu jamais conseguiria trocar "Carol" por "Karol" alterando seu primeiro elemento

lista_nomes[0][0] = K
NÃO FUNCIONA


Concatenar listas

Para juntar duas listas é a mesma coisa pra concatenar strings: usar o operador de soma.
Exemplo:
lista_todos = lista1 + lista 2


FUNÇÕES PARA A LISTA

Exemplo:

lista_de_notas = [6, 7, 8, 5, 4, 9, 10, 2, 4]

  • menor elemento da lista min(lista_de_notas) 2
  • maior
    max(lista_de_notas)
    10

  • soma
    sum(lista_de_notas)
    55

como eu ainda não instalei nenhum módulo statistics vou calcular a média manualmente calculando o número de elementos também

len(lista_de_notas)
9

print(55/9)
6.1

agora vou tentar tirar a mediana, usando o sort e depois tirar a média usando o acesso ao elemento

lista_de_notas.sort() essa função coloca a lista em ordem crescente (achei no stackoverflow)

rodei, e pedi o print

print(lista_de_notas)
[2, 4, 4, 5, 6, 7, 8, 9, 10]

a mediana é a do meio, já vi que é a nota 6 mas quero fazer do jeito certo

na aula de estatística aprendi que a mediana de uma observação com n ímpar é o número da posição do meio

quantos números eu tenho (n)? já vi no len!

len(lista_de_notas)
9

qual o número da posição do meio? n+1/2 = 9 + 1 = 10/2 = 5
como vou puxar ela na lista?

lista_de_notas[4]
6


A função range

Faz uma lista de maneira automática

lista_range = list(range(0,10,1))

criar list
num intervalo range
de 0 a 10
com passos de 1 a

retornou
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

então entendi de novo que o intervalo vai ser fechado à direita
se eu quisesse até o 10, ia pedir o11

lista_range = list(range(0,11,1))
print(lista_range)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


FUNÇÕES NATIVAS PARA LISTAS

Adicionar elementos em uma lista

Além de concatenar duas listas, também podemos adicionar elementos a uma lista usando o operador +

linguagens = ["Python", "SQL", "R"]
print(linguagens)
'Python', 'SQL', 'R'

agora vou adicionar mais elementos

linguagens_2 = linguagens + ["Java", "C++"]
print(linguagens_2)
['Python', 'SQL', 'R', 'Java', 'C++']

  • também dá pra adicionar usando a função append que é própria para listas

linguagens.append("Java")
linguagens.append("C++")
print(linguagens)
['Python', 'SQL', 'R', 'Java', 'C++']

se eu passar o appendcomo lista, ele vai inserir uma lista dentro da lista, e não acrescentar os elementos normalmente

linguagens.append(["Java", "C++"])
print(linguagens)
['Python', 'SQL', 'R', ['Java', 'C++']]

para adicionar vários elementos de uma vez em lista mas para adicionar como elementos soltos na lista original, usa-se o extend

linguagens.extend(["Java", "C++"])
print(linguagens)
['Python', 'SQL', 'R', ['Java', 'C++'], 'Java', 'C++']

nesse caso aqui acrescentei sem criar outra lista ou renomear(?)

o insert adiciona um elemento "Scala", mas em uma opção específica 0

linguagens.insert(0,"Scala")
print(linguagens)
['Scala','Python', 'SQL', 'R', ['Java', 'C++'], 'Java', 'C++', 'Java', 'C++']

Remover elementos

o remove deleta o primeiro elemento que aparecer com aquele nome

linguagens.remove("C++")
print(linguagens)
['Scala','Python', 'SQL', 'R', ['Java', 'C++'], 'Java']

percebi que ele deletou o "C++" que estava fora da lista embutida

o pop remove um elemento de acordo com o index, não pelo nome

linguagens.pop(0)
print(linguagens)
['Python', 'SQL', 'R', ['Java', 'C++'], 'Java']

retornou sem o 'Scala' que botamos no insert

Contar elementos

a função count conta quantos elementos você tem com aquele nome

linguagens.count("Java")
1

de novo, ele não contou o que estava na lista embutida

Limpar uma lista

linguagens_2.clear
print(linguagens_2)
[ ]

Discussion (0)