2012/7/20 Marco Beri <marcob...@gmail.com> > 2012/7/20 Walter Valenti <waltervale...@yahoo.it> > >> In un array di stringhe. Posso sempre infilarli in un tupla. >> > > Una roba così con la funzione all non ti garba? > > >>> import re > >>> s = ["12", "ab", "ZZ"] > >>> all(re.match(".*%s.*"%e, "abcZZxx12") for e in s) > True > >>> all(re.match(".*%s.*"%e, "abcZZxx1") for e in s) > False >
molto bello. questo esempio mi ha acceso una lampadina (ammetto di non essermi mai posto il problema), `all` e `any` cortocircuitano ma bisogna stare attenti: In [1]: l = range(1000) In [2]: timeit all([x for x in l]) 10000 loops, best of 3: 42.6 us per loop In [3]: timeit all(x for x in l) 1000000 loops, best of 3: 661 ns per loop oppure, per togliere ogni dubbio: In [7]: def foo(x): print '.',; return x In [8]: all([foo(x) for x in l]) . . . . . . [tanti altri puntini] .Out[8]: False In [9]: all(foo(x) for x in l) .Out[9]: False nel primo caso mi sa che l'interprete genera la lista che poi è passata a `all`. Nel secondo invece è sufficientemente sveglio da fare la cosa giusta. La vedo un po' come la differenza tra range e xrange. Scusate se per voi era ovvio, per me non lo era :P ciao, alberto
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python