\
        Get all the first choices listed from best match to worst match,
        optionally grouping on equal matches.

        :param target:
        :param choices:
        :param group:

def best_matches(self, target, choices):
        """\
        Get all the first choices listed from best match to worst match,
        optionally grouping on equal matches.

        :param target:
        :param choices:
        :param group:
        """

        all = self.all_matches

        try:
            matches = next(all(target, choices, group=True))
            for match in matches:
                yield match
        except StopIteration:
            pass