1
resposta

Criar listas com nomes distintos em um laço for

Estou trabalhando com um dataset de empréstimo e quero fazer listas com as variáveis discretas desse dataset. Quero que essas listas tenham o nome de cada uma das variáveis discretas. Tentei o seguinte código:

for nome in variavel_discreta:

    nome = dados_treino.query("Loan_Status == 'Y'")[nome].value_counts()

onde varavel_discreta é uma lista com 6 strings que eu quero que sejam os nomes das listas criadas com o loop. Do modo como está feito não está funcionando, alguma solução possível?

1 resposta

Oii Dexter, como você está?

Peço desculpas pela demora em obter um retorno.

Por padrão, em todo código que fazemos o Python armazena uma tabela de símbolos com as informações pertinentes sobre aquele programa, onde isso inclui nomes de variáveis, classes, métodos, etc. Essas tabelas de símbolos são armazenadas em formato de dicionário, ou seja, um conjunto de chave e valor. Vamos a um exemplo, imagine o seguinte código:

a = 10
b = 20

print(a + b)

Simples, certo?! Apenas somamos dois valores que estão atribuídos as variáveis "a" e "b". E para vermos as variáveis, métodos ou classes presentes nesse código, podemos utilizar o método globals(), veja o que ele retorna:

a = 10
b = 20

print(a + b)

print(globals())
# Resultado

{
   "__name__":"__main__",
   "__doc__":"None",
   "__package__":"None",
   "__loader__":<_frozen_importlib_external.SourceFileLoader object at 0x000001D050762640>,
   "__spec__":"None",
   "__annotations__":{

   },
   "__builtins__":"<module""builtins""(built-in)>",
   "__file__":".\\main1.py",
   "__cached__":"None",
   "a":10,
   "b":20
}

Veja que ao chamarmos a função globals(), foi retornado as variáveis "a" e "b" e as mesmas estão em formato de dicionário.

Sendo assim, para criarmos uma variável dentro do laço for dinamicamente podemos utilizar o globals(), adicionando a ele uma chave e atribuindo o valor. Veja abaixo um exemplo de código:

import random

variavel_discreta = ['primeira_lista', 'segunda_lista', 'terceira_lista', 'quarta_lista']

for variavel in variavel_discreta:
    globals()[variavel] = random.sample(range(1, 10), 4)

# nome de uma das variáveis discreta
print(primeira_lista)

Porém, deve-se utilizar o globals() com cautela, pois ele modifica o escopo de informações criadas pelo próprio python a respeito do programa e além disso, variáveis que possuem escopo global dão brechas no código para que sejam acessíveis a partir de qualquer trecho, o que por vezes é indesejável.

Uma solução alternativa e que consiste em uma boa prática de programação é o uso de um dicionário, onde a chave será o nome da sua variável discreta e a lista o valor dessa variável, como mostro abaixo:

import random

variavel_discreta = ['primeira_lista', 'segunda_lista', 'terceira_lista', 'quarta_lista']
variaveis = {}

for variavel in variavel_discreta:
    variaveis[variavel] = random.sample(range(1, 10), 4)

# nome de uma das variáveis discreta
print(variaveis['primeira_lista'])

Espero ter ajudado e qualquer dúvida estou por aqui.

Grande abraço!

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