Tenho uma dúvida sobre o trecho de código abaixo:
for i, name in enumerate([x[:-3] for x in dm_cov.columns[:10]]):
stats['beta'][i].write(f'../data/{sub}_beta_{name}.nii.gz')
É correto dizer que o trecho de código acima é funcionalmente equivalente ao trecho de código abaixo?
for i, name in enumerate([x for x in dm_cov.columns[:7]]):
stats['beta'][i].write(f'../data/{sub}_beta_{name}.nii.gz')
Estou curioso porque x
deveria ser um nome de coluna, então não tenho certeza de como ele pode ser subdividido em [:-3]
.
Obrigado!
Defina
columns
como iterável e compare as diferenças:Não, os dois trechos não são equivalentes.
dm_cov.columns[:10]
fornece os primeiros dez nomes de colunas.x[:-3] for x in ...
em seguida, corta os três últimos caracteres de cada nome de coluna fornecido pordm_cov.columns[:10]
.Seu segundo snippet
[x for x in dm_cov.columns[:7]]
leva apenas os primeiros sete nomes de colunas na íntegra.A propósito, essa compreensão da lista é inútil no segundo trecho, você poderia simplesmente
enumerate(dm_cov.columns[:7])
Você pode verificar isso usando um iterável diferente em vez de
dm_cov.columns
:Não, eles não são equivalentes.
Se
x
for um nome de coluna,x[:-3]
é o nome da coluna com os últimos 3 caracteres removidos. A segunda versão do código não remove os últimos 3 caracteres.A primeira versão itera pelos primeiros 10 nomes de colunas, a segunda versão itera apenas pelos primeiros 7 nomes de colunas.
Você parece ter assumido que as duas fatias estão operando no mesmo nível, então você pode combinar os índices finais. Mas uma fatia opera na lista de nomes, a outra opera em cada nome.