Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Mas e se eu quiser usar o if para alocar a variavel?

Prezados, tudo bem?

eu estou fazendo o curso de data science e tenho umas duvidas relacionadas ao if.

de acordo com a aula, podemos aplicar o if em situacoes como essa:

# 1º item da lista - Nome do veículo
# 2º item da lista - Ano de fabricação
# 3º item da lista - Veículo é zero km?
dados = [
    ['Jetta Variant', 2003, False],
    ['Passat', 1991, False],
    ['Crossfox', 1990, False],
    ['DS5', 2019, True],
    ['Aston Martin DB4', 2006, False],
    ['Palio Weekend', 2012, False],
    ['A5', 2019, True],
    ['Série 3 Cabrio', 2009, False],
    ['Dodge Jorney', 2019, False],
    ['Carens', 2011, False]
]
dados
A, B, C = [], [], []

for lista in dados:
  if lista[1] <= 2000:
    A.append(lista)
  elif lista[1] >= 2000 and lista[1] <= 2010:
    B.append(lista)
  else:
    C.append(lista)

Entendi que neste caso conseguimos fazer com que os dados sejam alocados a cada lista a b c baseado nas instruções que foram dadas durante o uso do if elif e else. Porem, eu gostaria de saber como que fazemos por exemplo:

CARROS = ['GRANDE','MEDIO','PEQUENO']
COR = ['VERMELHO','AMARELO']
carros_produzidos = range(1,5000)

Imagina a situação na qual eu queira produzir 3 tipos de carros e cada um na cor vermelho e amarelo. So que eu quero que esta cor seja igualmente dividida entre os 3 carros, ou seja, 2500 grandes vermelhos e 2500 grandes amarelos, 2500 medios vermelhos e 2500 medios amarelos, e por ai vai. Como que eu faço para usar o if nessa situação? Obrigado!

1 resposta
solução!

Oi, tudo bom com você? Espero que sim!

A solução utilizando condicionais if, elif e else pode ser demarcando uma variável contadora de um laço for que irá rodar de 0 a 15000 (2500*2*3 = 15000):

CARROS = ['GRANDE','MEDIO','PEQUENO']
COR = ['VERMELHO','AMARELO']
producao_carros = []

for producao in range (0, 15000):
  if producao < 2500:
    producao_carros.append([CARROS[0],COR[0]])
  elif producao < 2500*2:
    producao_carros.append([CARROS[0],COR[1]])
  elif producao < 2500*3:
    producao_carros.append([CARROS[1],COR[0]])
  elif producao < 2500*4:
    producao_carros.append([CARROS[1],COR[1]])
  elif producao < 2500*5:
    producao_carros.append([CARROS[2],COR[0]])
  else:
    producao_carros.append([CARROS[2],COR[1]])

Ao realizar essa opção de desenvolvimento percebi que ela pode ser bastante cansativa devido a grande quantidade de condicionais. Uma solução para evitar um grande trabalho manual seria utilizar apenas laços de repetição, no caso, o laço for.

Com o for podemos rodar os valores da lista CARROS e COR e também determinar a quantidade de amostras, organizando assim uma estrutura que escala laços de forma bem interessante:

CARROS = ['GRANDE','MEDIO','PEQUENO']
COR = ['VERMELHO','AMARELO']
producao_carros = []

for carro in range (0, 3):
  for producao in range (0, 2500):
    for cor in range (0,2):
      producao_carros.append([CARROS[carro],COR[cor]])

Os dados agrupados formam um listas de duas dimensões:

[['GRANDE', 'VERMELHO'],
 ['GRANDE', 'AMARELO'],
 ['GRANDE', 'VERMELHO'],
 ['GRANDE', 'AMARELO'],
 ['GRANDE', 'VERMELHO'],
 ...]

Para verificar a quantidade de amostras você pode rodar o código abaixo que utiliza o método unique da biblioteca numpy:

import numpy as np

resultado , counts = np.unique(np.array(producao_carros), axis=0, return_counts=True)
for i in range(0,counts.shape[0]):
  print(resultado[i], ' - ', counts[i], 'amostras')

Teremos como resultado:

['GRANDE' 'AMARELO']  -  2500 amostras
['GRANDE' 'VERMELHO']  -  2500 amostras
['MEDIO' 'AMARELO']  -  2500 amostras
['MEDIO' 'VERMELHO']  -  2500 amostras
['PEQUENO' 'AMARELO']  -  2500 amostras
['PEQUENO' 'VERMELHO']  -  2500 amostras

Espero ter te ajudado, bons estudos!