python en - Forma pitónica de combinar el bucle FOR y la declaración IF.




else ejemplos (8)

Sé cómo usar los bucles y las declaraciones if en líneas separadas, como por ejemplo:

>>> a = [2,3,4,5,6,7,8,9,0]
... xyz = [0,12,4,6,242,7,9]
... for x in xyz:
...     if x in a:
...         print(x)
0,4,6,7,9

Y sé que puedo usar una lista de comprensión para combinar esto cuando las declaraciones son simples, como por ejemplo:

print([x for x in xyz if x in a])

Pero lo que no puedo encontrar es un buen ejemplo en cualquier lugar (para copiar y aprender) que muestre un conjunto complejo de comandos (no solo "imprimir x") que se producen después de una combinación de un bucle for y algunas declaraciones if. Algo que yo esperaría se ve como:

for x in xyz if x not in a:
    print(x...)

¿No es así como se supone que funciona Python?


Answers

Lo siguiente es una simplificación / una línea de la respuesta aceptada:

a = [2,3,4,5,6,7,8,9,0]
xyz = [0,12,4,6,242,7,9]

for x in (x for x in xyz if x not in a):
    print(x)

12
242

Observe que el generator se mantuvo en línea . Esto se probó en python2.7 y python3.6 (observe los parens en la print ;))


Use intersection o intersection_update

  • intersección

    a = [2,3,4,5,6,7,8,9,0]
    xyz = [0,12,4,6,242,7,9]
    ans = sorted(set(a).intersection(set(xyz)))
    
  • intersection_update :

    a = [2,3,4,5,6,7,8,9,0]
    xyz = [0,12,4,6,242,7,9]
    b = set(a)
    b.intersection_update(xyz)
    

    entonces b es tu respuesta


También puede usar generators , si las expresiones del generador se vuelven demasiado complejas o complejas:

def gen():
    for x in xyz:
        if x in a:
            yield x

for x in gen():
    print x

Personalmente creo que esta es la versión más bonita:

a = [2,3,4,5,6,7,8,9,0]
xyz = [0,12,4,6,242,7,9]
for x in filter(lambda w: w in a, xyz):
  print x

Editar

Si está muy interesado en evitar usar lambda, puede usar la aplicación de función parcial y el módulo de operador (que proporciona funciones de la mayoría de los operadores).

https://docs.python.org/2/library/operator.html#module-operator

from operator import contains
from functools import partial
print(list(filter(partial(contains, a), xyz)))

Probablemente usaría:

for x in xyz: 
    if x not in a:
        print x...

a = [2,3,4,5,6,7,8,9,0]
xyz = [0,12,4,6,242,7,9]  
set(a) & set(xyz)  
set([0, 9, 4, 6, 7])


google-opensource.blogspot.com/2009/06/…

Un ejemplo a través de Matt Cutts a través de SL4A - "aquí está un escáner de código de barras escrito en seis líneas de código Python:

import android
droid = android.Android()
code = droid.scanBarcode()
isbn = int(code['result']['SCAN_RESULT'])
url = "http://books.google.com?q=%d" % isbn
droid.startActivity('android.intent.action.VIEW', url)




python loops if-statement for-loop