maybe just always return [x for x in available if not in taken]? this type of micro-optimization is unlikely to make a huge diff.