, . generator, . , , .
, , .
def find_list(x, S):
ret = [L for L in S if x in L]
return ret[0] if len(ret) else None
def find_iter(x, S):
ret = (L for L in S if x in L)
try:
return next(ret)
except StopIteration:
return None
iPython:
In [1]: S = [["a"], ["b", "c",], ["d"]]
In [2]: %timeit find_list("b", S)
1000000 loops, best of 3: 475 ns per loop
In [3]: %timeit find_list("f", S)
1000000 loops, best of 3: 349 ns per loop
In [4]: %timeit find_iter("b", S)
1000000 loops, best of 3: 802 ns per loop
In [5]: %timeit find_iter("f", S)
100000 loops, best of 3: 1.58 ยตs per loop
by @timgeb, :
def find_iter_opt(x, S):
ret = (L for L in S if x in L)
return next(ret, None)
In [8]: %timeit find_iter_opt("b", S)
1000000 loops, best of 3: 751 ns per loop
In [9]: %timeit find_iter_opt("f", S)
1000000 loops, best of 3: 597 ns per loop