Python switch series 10: varias derivaciones, expresiones generadoras

1. Introducción

Las comprensiones (también conocidas como analíticas) son una característica única de Python. Una deducción es una estructura que puede construir una nueva secuencia de datos a partir de una secuencia de datos . Hay tres tipos de derivaciones, ambas compatibles con Python 2 y 3:

  1. Comprensión de listas
  2. Dict comprensión
  3. Establecer comprensión

La introducción oficial a la deducción es:

La comprensión consta de una sola expresión seguida de al menos una cláusula for y cero o más cláusulas for o if . En este caso, los elementos del nuevo contenedor son aquellos que se producirían considerando cada una de las cláusulas for o if como un bloque, anidando de izquierda a derecha y evaluando la expresión para producir un elemento cada vez que se alcance el bloque más interno.

La comprensión se compone de una sola expresión, la expresión va acompañada de 0 o más cláusulas for / if, pero hay al menos una cláusula for. En este caso, los elementos del nuevo contenedor se generan así: trate cada cláusula en la cláusula for o if como un bloque, anide de izquierda a derecha y calcule la expresión para llegar a lo más interno cada vez que se genere un elemento. cuando la capa del bloque.

En segundo lugar, la gramática específica

Comprensión de listas []

  • Genere una lista en el intervalo [0,30).
>>> multiples = [i for i in range(30)]
>>> print(multiples)
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
>>>
  • Genere una lista divisible por 3 en el intervalo [0,30).
>>> multiples = [i for i in range(30) if i % 3 == 0]
>>> multiples
 [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

Comprensión del diccionario {}

Utilice la comprensión del diccionario para excluir los elementos del diccionario con la clave "1"

def Dict_comprehension_Test():
    src_dict = {
        "1": 'first',
        "2": 'second',
        "3": 'third'
    }
    exclude1_dict = {key:value for key, value in src_dict.items() if key != "1"}
    print(src_dict)
    print(exclude1_dict)

Resultado de salida:

{'1': 'first', '2': 'second', '3': 'third'}
{'2': 'second', '3': 'third'}

Establecer comprensión {}

def Set_comprehension_Test():
    list_src = [1,1,2]
    set_seq={i**2 for i in list_src}
    print(set_seq)
    print(type(set_seq))

Resultado de salida:

{1, 4}
<class 'set'>

La diferencia con el primero:

  1. A diferencia de la comprensión de listas, la comprensión de conjuntos utiliza el símbolo {} (llaves) ;
  2. A diferencia de las comprensiones de diccionario, las comprensiones de conjuntos no tienen pares clave-valor ;

Expresión generadora

         La misma sintaxis, usando () --- paréntesis producirá un generador .

>>> lista=[1,2,3,4,5,6]
>>> test_gen=(i for i in lista if i !=3 )
>>> print(test_gen)
<generator object <genexpr> at 0x028C6E70>
>>> next(test_gen)
1
>>> next(test_gen)
2
>>> test_gen.__next__()
4
>>>

Ventajas de utilizar comprensiones / generadores

  1. Simplifique la escritura de código;
  2. Mejorar la eficiencia operativa

Por ejemplo, encuentre la suma de los cuadrados de todos los números naturales en el rango (0, 10).

  • Posibles formas de utilizar expresiones generativas:
>>> sum_a = sum(x*x for x in range(0,10))   
>>> sum_a
285
  • Una forma posible de escribir sin generar una fórmula es:
def sum_power_ten():
    src = range(0, 10)
    sum = 0
    for i in src:
        sum += (i*i)
    print(sum)

Comparado:

         El código que no usa la fórmula generativa usa la variable temporal src para almacenar el rango y luego usa el bucle for para atravesar el rango de rango El código es mucho más complicado que la fórmula generativa.

Supongo que te gusta

Origin blog.csdn.net/zhaogang1993/article/details/89070020
Recomendado
Clasificación