1
resposta

'Rodas de liga' - continuacao

Baseado na resposta anterior, entao podemos dizer que "x in s" retorna somente o valor contido numa lista diretamente. Entao, tenho algumas duvidas, que talvez sejam avancadas pra essa parte do curso:

1) Como saber quantas sub, ou sub-sub listas, etc, uma lista tem?

2) Como saber se 'Rodas de liga' esta em alguma dessas sublistas?

3) Como contar quantas vezes esse element X aparece em uma ou mais sublistas? Eu chequei o codigo s.count(x) e retorna zero para esse exemplo possivelmene porque ele entende que 'Rodas de liga' nao pertence a carro.

Obrigado

1 resposta

Boa noite Alvaro, tudo bem com você?

Acho esse tipo de problema divertido e desafiador, ele está relacionado a estrutura de dados e algoritmos. Resumidamente, algoritmo é um processo sistemático para a resolução de um problema; Estrutura de dados é a forma que os dados são representados numa linguagem de programação, listas, árvores, etc.

Já quando estamos tratando uma base de dados esse tipo de problema não é tão comum, quando encontramos dados com essa forma há uma grande chance do problema estar na modelagem dos dados.

Caso você tenha interesse em conhecer/treinar mais esse tipo de algoritmo, o episódio do podcast Hipsters #186 Algoritmos e estrutura de dados, pode te ajudar. Aqui na plataforma tem o curso de Estrutura de Dados: Computação na prática com Java, apesar do curso ser com java, vale a pena o estudo pela parte conceitual.

Existem diversos livros do assunto com valores variados, vou indicar três pra você:

  • Estruturas de Dados e seus Algoritmos - Markenzon
  • Entendendo Algoritmos: Um Guia Ilustrado Para Programadores e Outros Curiosos - Aditya Y. Bhargava; e
  • Algoritmos Teoria e Prática - Thomas H. Cormen;

Agora chega de papo e vamos aos códigos!

Lista utilizada para os exempos:

#vamos trabalhar em cima dessa lista 
carro = [
    'Jetta Variant', 
    'Motor 4.0 Turbo', 
    2003, 
    44410.0, 
    False, 
    ['Rodas de liga', 'Travas elétricas', 'Piloto automático',['Rodas de liga']], 
    88078.64,
    'Rodas de liga'
]

Função que recebe uma lista como parâmetro e imprime em qual nível a informação está localizada:

# imprime: 
#- nível 1 para lista principal
#- nível 2 para sub lista 
#- nível 3 para sub sub lista...
def imprime_estrutura_com_nivel(lista, nivel=0): 
  if nivel == 0:
    nivel = 1 
  for i in lista:    
    if type(i) is list:                   
        imprime_estrutura_com_nivel(i, nivel + 1)      

    else:
      print(f"nível: {nivel} - {i}")

#chamada da função
imprime_estrutura_com_nivel(carro)

Saída:

nível: 1 - Jetta Variant
nível: 1 - Motor 4.0 Turbo
nível: 1 - 2003
nível: 1 - 44410.0
nível: 1 - False
nível: 2 - Rodas de liga
nível: 2 - Travas elétricas
nível: 2 - Piloto automático
nível: 3 - Rodas de liga
nível: 1 - 88078.64
nível: 1 - Rodas de liga

Função que conta o número de listas existentes:

#Mesma ideia de contar nós em árvores
def conta_numero_sublistas(lista):        
    if type(lista) != list:        
        return 0     

    conta = 1 

    for i in lista:   
      conta += conta_numero_sublistas(i)           

    return conta

conta_numero_sublistas(carro)

Saída:

3

Função que recebe um valor e imprime a informação com o nível situado:

#conta as ocorrências do valor
def imprime_valor_encontrado(lista,valor, nivel=0): 
  if nivel == 0:
    nivel = 1 
  for i in lista:    
    if type(i) is list:                   
        imprime_valor_encontrado(i,valor, nivel + 1)      

    elif str(i).find(valor) != -1:           
      print(f"o valor procurado está no nível: {nivel} - {i}")

#Chamada da função
imprime_valor_encontrado(carro,'Rodas de liga')

Saída:

o valor procurado está no nível: 2 - Rodas de liga
o valor procurado está no nível: 3 - Rodas de liga
o valor procurado está no nível: 1 - Rodas de liga

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software