Use list comprehensions for efficiency

For loops can be inefficient, particularly when doing a dot command with
them. https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Loops and
https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Avoiding_dots...

This patch makes use of list comprehensions to be as efficient as
possible while still retaining order. Efficiency was lost a bit when
switching away from sets() but this gains some of it back.
This commit is contained in:
Jesse Keating 2014-01-03 18:07:00 -08:00
commit 23720ff19d

View file

@ -133,11 +133,7 @@ class Inventory(object):
# exclude hosts not in a subset, if defined # exclude hosts not in a subset, if defined
if self._subset: if self._subset:
subset = self._get_hosts(self._subset) subset = self._get_hosts(self._subset)
new_hosts = [] hosts = [ h for h in hosts if h in subset ]
for h in hosts:
if h in subset and h not in new_hosts:
new_hosts.append(h)
hosts = new_hosts
# exclude hosts mentioned in any restriction (ex: failed hosts) # exclude hosts mentioned in any restriction (ex: failed hosts)
if self._restriction is not None: if self._restriction is not None:
@ -183,9 +179,7 @@ class Inventory(object):
elif p.startswith("&"): elif p.startswith("&"):
hosts = [ h for h in hosts if h in that ] hosts = [ h for h in hosts if h in that ]
else: else:
for h in that: hosts.extend([ h for h in that if h not in hosts ])
if h not in hosts:
hosts.append(h)
return hosts return hosts