Máis datos estruturados: Conxuntos, Tuplas e Dicionarios

Traballeremos con datos estruturados simples (chamados lineais), pero non tan simples como para que teñan unha estrutura análoga  en Scratch: conxuntos, tuplas e diccionarios.

Conxuntos (sets)

O conxunto (set in english) é unha colección de datos non ordenados e que polo tanto non teñen índice (viría a ser unha lista desordenada). Os elementos aparecen ao chou:

Código Función Exemplo
nome_do_conxunto = {elemento A, elemento B, elemento C,...} Crea o conxunto cos elementos.  Non están ordenados. nomes_serpe = {'Víbora, 'Cobra', 'Pitón'}
nome_do_conxunto = set([elementoA,elementoB,elementoC...]) Crea o conxunto con elementos,  a partir dunha lista nomes_serpe = (['Víbora,'Cobra','Pitón'])
nome_do_conxunto = set() Crea un conxunto baleiro (ollo: se poñemos {} a secas creamos un dicionario, non un conxunto) nomes_serpe = set()

 

Un conxunto non pode contener listas, diccionarios, tuplas ou conxuntos, ou sexa, datos ordenados. Pero os elementos pode ser datos simples de distinto tipo: cadenas, números enteros e reais, lóxicos...

Algo máis de conxuntos:

Código Función Exemplo
nome_do_conxunto = set(range(3)) Crea un conxunto a partir dun bucle numeros123 = set(range(3))
list({conxunto}) Convirte un conxunto en lista lista = list({'ola',2,3})

len(nome_do_conxunto)

len({elementoA,elementoB...})

Lonxitude do conxunto

a = {'a',3,'d',5}

len a #será 4

len({1,2,3} #será 3

conxunto.add(elemento) Engade un novo elemento

a = {1,3,2}

a.add(4) # agora engadimos o 4

conxunto.discard(elemento)

conxunto.remove(elemento)

Borra un elemento

a = {1,3,2,'ola'}

a.discard(3) #borramos o 3

a.remove('ola') #borramos 'ola'

Exercicios:

  1. Crea un conxunto co teu nome, apelidos e data de nacemento.
  2. Engade a túa vila de nacemento.
  3. Borra os teus apelidos e convirte en lista o conxunto.

Se queres profundar en conxuntos podes visitar a páxina Este conxunto está conxuntado?

TUPLAS

A tupla é unha lista de datos que poden ser de distinto tipo (cadeas, números,lóxicos...) e que non pode modificarse. É útil cando queremos que a saída dunha función non sexa un dato simple. As tuplas son datos que gardamos en parénteses cun nome deste xeito:

Código Función Exemplo
nome_da_tupla = (elemento 0, elemento 1, elemento 2,...) Almacenar datos de distinto tipo, como unha data,  (25, 'Maio', 2018)  porque ten datos numéricos e cadeas. data = (25, 'Maio', 2018)
nome_da_tupla [índice] Consultar o valor dunha tupla,  o índice comenza por 0 e non por 1

data (0) #sería o número 25

data (1) #sería a cadea Maio

data (2) #sería  o número 2018

tupla1 = (elemento 0, elemento 1, tupla2) Unha tupla pode estar añidada noutra.  tupla1 = (Pepa, Pérez, (10, Abril, 2005))

 

A diferencia importante é que non podemos modificala. Se probamos a escribir tupla [índice_existente] = novo_dato veremos que da unha mensaxe de erro.

 

Exercicios:

  1. Crea unha tupla co teu nome, apelidos e data de nacemento. Consulta a tupla imprindo en pantalla o teu nome, o teu apelido...
  2. Que sucede se escribes un índice maior, que non existe?. Por exemplo na tupla de 3 elementos se escribimos tupla[3]?
  3. Para que utilizamos a nomenclatura tupla[índice:] ou tupla[:índice]?

 

Comezo

Algo máis de tuplas:

Na seguínte táboa amosasos algunhas das operacións que se poden facer coas tuplas:

Operacións Código Explicación Exemplo
Lonxitude dunha tupla len(tupla) Igual que nas listas

data = (25, 'Maio', 2018)

 len (tupla) #será 3

Tupla baleira tupla = () Unha tupla sen contido

 tupla = ()

len (tupla) será 0

Tupla unitaria tupla = (elemento,) Unha tupla cun único elemento, pero que non é unha variable

tupla = (2005) #isto non é unha tupla

tupla = (2005,) #isto é unha tupla unitaria

Empaquetado de tuplas tupla = variable1, variable2, variable 3,... Podemos gardar variables en tuplas, simplemente separándoas por comas

a = Teri

b = Miko

c = DJ

tupla =a,b,c

Desempaquetado de tuplas

tupla = ('serpe',' pitón', 15)

animal, nome, número = tupla

Asigna variables a cada compoñente da tupla (lembra que non podemos modificar directamente a tupla). Estas variables non poden chamarse igual e teñen que ser tantas como o número de compoñentes da tupla.

tupla = (Fátima', 'Hajji', 'DJ')

nome,apelido,profesión = tupla

print(nome) #dará como resultado Fátima

 

 

Exercicios:

 

  1. Facer unha tupla que almacene o tempo en forma de (horas, minutos,segundos). Darlle cando menos 3 valores.
  2. Facer unha función que sume dous elementos ou tempos distintos. Podes facelo sen ter que converter o dato (por exemplo 75 min non ten por que ser 1 h e 15 min)
  3. Avanzado: facer unha función que dada unha data almacenada nunha tupla (día,mes,ano) calcule o día seguinte, tendo en conta os cambios de mes. O mes poderá estar con número ou con letras.

 

 

Comezo

DICIONARIOS

Un dicionario é un tipo de dato estruturado que consiste nunha lista nor ordenada de pares de 2 valores, un deles é o valor que queremos almacenar e o  outro é  a clave para poder consultar o valor. A clave é única en cada dicionario, pero un mesmo valor pode estar asignado a máis dunha clave.

O dicionario  escribese así:

nome_do_dicionario = {clave1:valor1, clave2:valor2,...}

Tanto a clave como o valor poden ser calquera dato ou variable: números, cadeas, tuplas,...

Lembra: o dicionario non está ordenado, polo que non podemos usar os índices coma nas listas ou tuplas. A consulta faise co valor da clave.

Algunhas das operacións que se poden facer con dicionarios aparecen na seguinte táboa:

Operación Código Explicación
Definir un dicionario serpes_galegas = {1: 'cobra picuda',2:'cobra lagarteira',3:'cobra rateira'} Os números 1,2 e 3 son as claves, tamén poderían ser palabras
Acceder a un valor print(serpes_galegas[1]) O resultado sería cobra picuda (lembra que o 1 non é un índice senón o nome da clave deste exemplo)
Crear diccionario baleiro animais = {} Podemos engadir un dicionario baleiro para despois engadir os elementos a través dunha clave
Engadir elementos nun diccionario baleiro

animais['reptil'] = 'serpe'

animais['mamifero'] = 'can'

Entre corchetes  []poñemos a clave.

Non se pode repetir unha clave

Imprimir un valor print(animais['reptil'])

Imprime o valor, pero se non existe esa clave produce un erro de sintaxe:

Traceback...KeyError

Imprimir un valor (aínda que esté baleiro). print(animais.get('ave')) # empregamos () non [] Empregamos a función get para poder imprimir  tamén se o valor está baleiro. Nese caso arroxará o resultado none

 

 

Exercicio:

 

  1. Crea un dicionario con 3 pares de valores. Por exemplo (país,nome_de_deportista) ou (empresa,nome_de_videoxogo).
  2. Engade un valor novo.
  3. Consulta o dicionario: dado o valor da clave ten que imprimir o valor do dato asociado.
  4. Introduce un valor de clave que non existe. Faino logo coa función get ().

 

Comezo

MÁIS DE DICIONARIOS

Como normal xeral os dicionarios podemos utilizalos para pequenas bases de datos, onde vaiamos consultar os valores. Por iso é necesario coñecer os comandos que se empregan para facer estas consultas. Na seguinte táboa vemos algúns:

Consultas Exemplo Resultado
Consultar pola clave

for n in serpes_galegas: #n é a clave neste exemplo

print(n,' : ', serpes_galegas[n])

1  :  cobra picuda
2  :  cobra lagarteira
3  :  cobra rateira

Gardando nunha tupla o par clave

empregando a función items()

for n,serpes in serpes_galegas.items():

print(n,' : ', serpes)

1  :  cobra picuda
2  :  cobra lagarteira
3  :  cobra rateira

Verificar ou consultar unha clave

empregando o valor in

if  2 in serpes_galegas:

print('No lugar 2 está a ', serpes_galegas[2] )

No lugar 2 está a  cobra lagarteira

 

Algo moi interesante dos dicionarios: Python usa un algoritmo diferente para buscar nas listas ou nas tuplas do que usa nos dicionarios, de tal xeito que o tempo de busca nun dicionario é case que o mesmo independentemente do seu tamaño. Isto é algo sorprendente. O algoritmo das listas emprega a  comparación de termos  e, a medida que crece a lista ou a tupla, o tempo de consulta é maior. Pero o dicionario emprega un algoritmo de tipo hash, que busca polo valor da clave. Esta é a razón pola que as claves non poden modificarse.

 

 

Comezo

Listas agrupadas: contar palabras O xogo de codificar/decodificar