Existe uma expressão especial em Python chamada derivação . Sua função é pegar uma estrutura de dados como entrada, depois filtrá-la e calculá-la e, finalmente, gerar outra estrutura de dados. De acordo com diferentes estruturas de dados, pode ser dividido em compreensão de lista, compreensão de conjunto e compreensão de dicionário. Vamos primeiro nos concentrar nas compreensões de lista mais comumente usadas.
Vamos primeiro dar uma olhada no formato de sintaxe das compreensões de lista:
listname = [expressão para variável no objeto (ifcondição)]
listname: o nome da lista recém-gerada.
expressão: expressão.
variável: nome da variável.
(se condição): usado para selecionar uma lista que atenda aos requisitos do objeto.
Partimos de três aspectos: uma lista de valores dentro de um intervalo especificado, uma lista de condições especificadas e uma lista composta por elementos que atendem às condições.
Vamos primeiro pensar em quando precisamos gerar 10 números e armazená-los em uma lista. Vejamos primeiro a forma comum:
nomelista=[]foriinrange(10):nomelista.append(i)print(nomelista)
A saída é:
[0,1,2,3,4,5,6,7,8,9]
Usar uma compreensão de lista requer apenas uma linha:
nomelista=[iforiinrange(10)]
A saída é:
[0,1,2,3,4,5,6,7,8,9]
Esta abordagem simplifica nossas operações ao definir listas.
Suponha que saibamos que uma lista é listname = [1,3,5,6,7,9,10,23,26,28,64,98]. Queremos encontrá-la e adicionar todos os números nela por 5. O método comum:
nomelista=[1,3,5,6,7,9,10,23,26,28,64,98]foriinrange(len(nomelista)):nomelista[i]+=5print(nomelista)
A saída é:
[6,8,10,11,12,14,15,28,31,33,69,103]
Usar compreensões de lista também é muito conciso:
nomelista=[1,3,5,6,7,9,10,23,26,28,64,98]nomelista=[i+5foriinnomelista]
Saída:
[6,8,10,11,12,14,15,28,31,33,69,103]
Esse tipo de compreensão de lista é mais complexo que os dois primeiros, mas pode simplificar mais código.
Vamos dar um exemplo para observar o formato do código:
Sabe-se que uma lista é listname = [8,33,53,64,73,95,101,123,126,164,198], então precisamos encontrar os números da lista que são menores e maiores que 100, depois multiplicá-los por 0,8 e, finalmente, retorne-os à lista.
Se usarmos o método normal:
listname=[10,20,30,40,60,120,130,140,160,180,200]newlist=[]#Crie uma nova lista para armazenar foriinrange(len(listname)):#Index value pass Calendário iflistname[i]>100:#Encontre um número maior que 100 listname[i]*=0,8#Multiplicar por 0,8 newlist.append(listname[i])#Adicionar à nova lista print(newlist)
A saída é:
[96,0,104,0,112,0,128,0,144,0,160,0]
Use compreensões de lista:
nomelista=[10,20,30,40,60,120,130,140,160,180,200]novalista=[i*0.8foriinlistnameifi>100]imprimir(novalista)
Resultado de saída:
[96,0,104,0,112,0,128,0,144,0,160,0]
Vamos analisá-lo com base na estrutura gramatical deste exemplo:
Podemos usar este método ao usar compreensões de listas complexas. Pode-se entender que primeiro selecionamos os elementos que atendem às condições (instruções condicionais) do objeto, depois processamos a expressão de saída e, finalmente, os armazenamos na lista, formando uma. nova lista.
Aqui estão alguns exemplos de perguntas que você pode tentar.
1. Lista [1,2,13,22,25], use a compreensão da lista para extrair números maiores que 10, elevar ao quadrado cada número e, finalmente, gerar.
O resultado da execução é:
[169.484.625]
O código é o seguinte, você pode tentar completar a resposta de referência primeiro.
lista=[1,2,13,22,25]novalista=[i*iforiinlistifi>10]imprimir(novalista)
2. Use a compreensão de lista para encontrar todos os números ímpares na lista e construir uma nova lista, lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
O código é o seguinte:
lista=[1,2,3,4,5,6,7,8,9,10]novalista=[iforiinlistifi%2==1]imprimir(novalista)
A saída é:
[1,3,5,7,9]