4
respostas

Nao entendi muito bem a logica por tras da sintaxe do loop em uma linha

list(set([item for lista in dados for item in lista]))

Mais pro final da aula o professor usa esse codigo para fazer o mesmo laço que nos fazemos normalmente linha por linha, a questao é que nao entendi bem esse, se alguem puder me dar uma clareada pra que entre melhor na minha cabeça eu agradeço

4 respostas

Olá, Gabriel

Esse código list(set([item for lista in dados for item in lista])) usa a sintaxe de List Comprehension (compreensão de lista) em Python. Isso é muito interessante pois reduz todo o código a uma única linha.

O que acontece aqui é o seguinte:

  • Temos uma lista de listas chamada "dados":
dados = [ 
    ['Rodas de liga', 'Travas elétricas', 'Piloto automático', 'Bancos de couro', 'Ar condicionado', 'Sensor de estacionamento', 'Sensor crepuscular', 'Sensor de chuva'],
    ['Central multimídia', 'Teto panorâmico', 'Freios ABS', '4 X 4', 'Painel digital', 'Piloto automático', 'Bancos de couro', 'Câmera de estacionamento'],
    ['Piloto automático', 'Controle de estabilidade', 'Sensor crepuscular', 'Freios ABS', 'Câmbio automático', 'Bancos de couro', 'Central multimídia', 'Vidros elétricos']
]
  • Como queremos essas três listas em uma única lista, usamos um loop "for" para percorrer cada lista dentro da lista "dados" e cada elemento dentro de cada lista.

  • Usando a sintaxe de compreensão de lista, criamos uma lista temporária que contém todos os elementos de cada lista dentro de "dados". A expressão [item for lista in dados for item in lista] cria essa lista temporária, onde cada elemento é percorrido dentro de cada lista dentro de dados.

  • Em seguida, envolvemos a lista temporária resultante em um conjunto (set) para remover qualquer elemento que esteja duplicado.

  • Finalmente, convertemos o conjunto resultante novamente em uma lista, usando a função list(). Essa nova lista contém apenas elementos únicos de todas as listas dentro de dados. O retorno do código será esse:

['4 X 4',
 'Central multimídia',
 'Ar condicionado',
 'Freios ABS',
 'Sensor crepuscular',
 'Piloto automático',
 'Vidros elétricos',
 'Controle de estabilidade',
 'Sensor de chuva',
 'Teto panorâmico',
 'Bancos de couro',
 'Rodas de liga',
 'Painel digital',
 'Câmbio automático',
 'Travas elétricas',
 'Câmera de estacionamento',
 'Sensor de estacionamento']

Espero que tenha te ajudado!

Oi, valquiria, muito obrigado pela explicaçao, mas acho que nao me expressei direito, eu queria entender a questao da sintaxe

[item for lista in dados for item in lista]

Tipo, como exatamente é escrito esse codigo?

Isso que eu não peguei, porque eu sinceramente nao conseguiria aplicar esse for de uma linha só em outras situaçoes

Primeiro eu coloco o final do for (nesse caso o item) depois coloco o primeiro for (for lista in dados) e depois o for item in lista? Poderia me dar outro exemplo de uma list compreension pra eu entender como aplicar a sintaxe direitinho?

Vamos lá, Gabriel!

A sintaxe da list comprehension em Python tem a seguinte estrutura geral:

[nova_lista for elemento in iteravel condição]

Onde:

  • nova_lista é a lista resultante, contendo os elementos gerados pela compreensão de lista

  • elemento é a variável que representa cada elemento do iterável

  • iterável é a estrutura de dados a ser percorrida

  • condição é uma expressão opcional que determina quais elementos do iterável serão incluídos na lista resultante.

Vou trazer dois exemplos, um sem condição e outro com condição!

Exemplo 1

Imagina que você tenha uma variável chamada numeros que armazena uma lista com alguns valores:

numeros = [1, 2, 3, 4, 5]

E se você quiser saber o quadrado de cada um desses valores usando List Comprehension? Podemos fazer o seguinte:

quadrados = [x**2 for x in numeros]

Essa expressão significa que cada elemento da nova lista quadrados é o resultado da elevação ao quadrado do elemento correspondente da lista numeros. No caso, a expressão x**2 é a expressão que eleva o número x ao quadrado. A variável x é um iterador que itera sobre todos os elementos da lista numeros. Ou seja, para cada valor da lista numeros, a expressão x**2 é aplicada e o resultado é adicionado à nova lista quadrados. A lista quadrados vai ter o seguinte resultado:

[1, 4, 9, 16, 25]

Essa é uma forma simples e concisa de criar uma nova lista a partir de outra lista, aplicando uma transformação a cada elemento, usando list comprehension em Python.

Exemplo 2

Agora vou dar um outro exemplo usando strings ao invés de números e com uma condição. Temos a seguinte lista:

frutas = ['Laranja', 'Melancia', 'Kiwi', 'Amora', 'Maçã',
'Abacaxi', 'Uva', 'Morango', 'Tangerina', 'Abacate', 'Acerola',
'Banana', 'Caqui', 'Graviola', 'Carambola', 'Mirtilo', 'Cereja',
'Figo', 'Framboesa', 'Goiaba', 'Jabuticaba', 'Jaca', 'Mamão',
'Manga', 'Maracujá', 'Melão', 'Pêssego', 'Pitaya', 'Romã']

Mas eu quero uma nova lista somente com as frutas que começam com a letra C. E aí? como faço isso?

nova_lista = [x for x in frutas if 'C' in x]

Essa expressão significa que cada elemento da nova lista é um elemento da lista frutas, desde que contenha a letra 'C'.

Ou seja, a expressãoif 'C' in x é uma condição que testa se a letra 'C' está presente em cada elemento da lista frutas. Se a condição for verdadeira, o elemento correspondente é adicionado à nova lista nova_lista.

Com esses exemplos ficou mais fácil entender como aplicar a sintaxe?

Agora ficou muito mais claro, obrigado Valquiria, agora vou procurar fazer exercicios disso ai para fixar bastante, tenha um bom dia