variable valor una seleccionar repite que por mas listas lista las funcionan encontrar elementos elemento diccionario dentro definir comprensión como cambiar asignar python python-2.7 loops python-3.x interpreter

valor - listas por comprensión python



Bucle mientras verifica el elemento en una lista en Python (1)

Digamos que tengo un simple código como este:

for i in range(1000): if i in [150, 300, 500, 750]: print(i)

¿Se crea la lista [150, 300, 500, 750] cada iteración del bucle? ¿O puedo asumir que el intérprete (por ejemplo, CPython 2.7) es lo suficientemente inteligente como para optimizar esto?


Puede ver el bytecode usando dis.dis . Aquí está la salida para CPython 2.7.11:

2 0 SETUP_LOOP 40 (to 43) 3 LOAD_GLOBAL 0 (range) 6 LOAD_CONST 1 (1000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 26 (to 42) 16 STORE_FAST 0 (i) 3 19 LOAD_FAST 0 (i) 22 LOAD_CONST 6 ((150, 300, 500, 750)) 25 COMPARE_OP 6 (in) 28 POP_JUMP_IF_FALSE 13 4 31 LOAD_FAST 0 (i) 34 PRINT_ITEM 35 PRINT_NEWLINE 36 JUMP_ABSOLUTE 13 39 JUMP_ABSOLUTE 13 >> 42 POP_BLOCK >> 43 LOAD_CONST 0 (None) 46 RETURN_VALUE

Por lo tanto, la creación de la lista se optimiza para la carga de una tupla constante (byte 22). La lista (que en realidad es una tupla en este caso) no se crea de nuevo en cada iteración.