Hay una expresión especial en Python llamada derivación . Su función es tomar una estructura de datos como entrada, luego filtrarla y calcularla, y finalmente generar otra estructura de datos. Según las diferentes estructuras de datos, se puede dividir en comprensión de listas, comprensión de conjuntos y comprensión de diccionarios. Centrémonos primero en las listas por comprensión más utilizadas.
Primero echemos un vistazo al formato de sintaxis de las listas por comprensión:
nombre de lista = [expresión para variable en objeto (si es condición)]
nombre de lista: el nombre de la lista recién generada.
expresión: expresión.
variable: nombre de la variable.
(si es condición): se utiliza para seleccionar una lista que cumpla con los requisitos del objeto.
Partimos de tres aspectos: una lista de valores dentro de un rango específico, una lista de condiciones específicas y una lista compuesta de elementos que cumplen las condiciones.
Primero pensemos en cuándo necesitamos generar 10 números y almacenarlos en una lista. Primero veamos la forma común:
nombre de lista=[]foriinrange(10):nombre de lista.append(i)print(nombre de lista)
La salida es:
[0,1,2,3,4,5,6,7,8,9]
Usar una lista por comprensión solo requiere una línea:
nombre de lista=[iforiinrange(10)]
La salida es:
[0,1,2,3,4,5,6,7,8,9]
Este enfoque simplifica nuestras operaciones al definir listas.
Supongamos que sabemos que una lista es nombre de lista = [1,3,5,6,7,9,10,23,26,28,64,98]. Queremos encontrarla y sumar todos los números por 5. El método ordinario:
nombre de lista=[1,3,5,6,7,9,10,23,26,28,64,98]foriinrange(len(nombre de lista)):nombre de lista[i]+=5print(nombre de lista)
La salida es:
[6,8,10,11,12,14,15,28,31,33,69,103]
El uso de listas por comprensión también es muy conciso:
nombre de lista=[1,3,5,6,7,9,10,23,26,28,64,98]nombre de lista=[i+5foriinnombre de lista]
Producción:
[6,8,10,11,12,14,15,28,31,33,69,103]
Este tipo de comprensión de listas es más complejo que los dos primeros, pero puede simplificar más código.
Tomemos un ejemplo para ver el formato del código:
Se sabe que una lista es listname = [8,33,53,64,73,95,101,123,126,164,198], luego necesitamos encontrar los números en la lista que son menores y mayores que 100, luego multiplicarlos por 0.8 y finalmente devolverlos a la lista.
Si utilizamos el método normal:
listname=[10,20,30,40,60,120,130,140,160,180,200]newlist=[]#Crear una nueva lista para almacenar foriinrange(len(listname)):#Recorrido del valor del índice iflistname[i]>100:#Encontrar un número mayor que 100 nombre de lista[i]*=0.8#Multiplicar por 0.8 newlist.append(nombre de lista[i])#Agregar a una nueva lista print(newlist)
La salida es:
[96,0,104,0,112,0,128,0,144,0,160,0]
Utilice listas por comprensión:
nombre de lista=[10,20,30,40,60,120,130,140,160,180,200]nueva lista=[i*0.8foriinlistnameifi>100]print(nueva lista)
Resultado de salida:
[96,0,104,0,112,0,128,0,144,0,160,0]
Analicémoslo basándonos en la estructura gramatical de este ejemplo:
Podemos usar este método cuando usamos listas por comprensión complejas. Se puede entender que primero seleccionamos los elementos que cumplen las condiciones (declaraciones condicionales) del objeto, luego procesamos la expresión de salida y finalmente los almacenamos en la lista. nueva lista.
A continuación se muestran algunas preguntas de ejemplo que puede probar.
1. Enumere [1,2,13,22,25], utilice la comprensión de listas para extraer números mayores que 10, elevar al cuadrado cada número y finalmente generar.
El resultado de ejecución es:
[169.484.625]
El código es el siguiente, primero puede intentar completar la respuesta de referencia.
lista=[1,2,13,22,25]nueva lista=[i*iforiinlistifi>10]imprimir(nueva lista)
2. Utilice la comprensión de listas para encontrar todos los números impares en la lista y construya una nueva lista, lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
El código es el siguiente:
lista=[1,2,3,4,5,6,7,8,9,10]nueva lista=[iforiinlistifi%2==1]imprimir(nueva lista)
La salida es:
[1,3,5,7,9]