On Friday, May 26, 2017 at 5:02:55 PM UTC+5:30, Cecil Westerhof wrote: > To check if Firefox is running I use: > if not 'firefox' in [i.name() for i in list(process_iter())]: > > It probably could be made more efficient, because it can stop when it > finds the first instance. > > But know I switched to Debian and there firefox is called firefox-esr. > So I should use: > re.search('^firefox', 'firefox-esr') > > Is there a way to rewrite > [i.name() for i in list(process_iter())] > > so that it returns True when there is a i.name() that matches and > False otherwise? > And is it possible to stop processing the list when it found a match?
'in' operator is lazily evaluated if its rhs is an iterable (it looks) So I expect you can replace if not 'firefox' in [i.name() for i in list(process_iter())]: with if not 'firefox' in (i.name() for i in list(process_iter())]): As this sessions indicates >>> def myiter(): ... yield 1 ... yield 2 ... print ("yielded 2") ... yield 3 ... print("yielded 3") ... # basic behavior >>> for x in myiter(): print(x) ... 1 2 yielded 2 3 yielded 3 # does not reach 2 3 >>> 1 in myiter() True # reaches 2 but not the print after >>> 2 in myiter() True # reaches 3 but not the print after >>> 3 in myiter() yielded 2 True # exhausts the iterator >>> 4 in myiter() yielded 2 yielded 3 False >>> -- https://mail.python.org/mailman/listinfo/python-list