Какой самый эффективный способ создания комбинаций набора в python?

Вот код, который я придумал:

def combinations(input):
    ret = ['']
    for i in range(len(input)):
        ret.extend([prefix+input[i] for prefix in ret])
    return ret

Этот алгоритм требует времени O(2^n), но можно ли уменьшить пространство? Я слышал об использовании yieldможет работать, но у меня возникли проблемы с тем, как реализовать с помощью yield. Пожалуйста, не используйте встроенную комбинированную функцию — я хотел бы посмотреть, как она реализована.

5
задан bernie 12 April 2012 в 01:01
поделиться