Вложенные функции генератора в python - PullRequest
2 голосов
/ 02 апреля 2010

Рассмотрим кортеж v = (a,b,c) и функцию генератора generate(x), которая получает элемент из кортежа и генерирует несколько опций для каждого элемента.

Каков питонный способ генерации набора всех возможных комбинаций результата generate(x) для каждого элемента в кортеже?

Я мог бы сделать это:

v = (a,b,c)
for d in generate(v[0]):
    for e in generate(v[1]):
        for f in generate(v[2]):
            print d,e,f

но это просто уродливо, плюс мне нужно общее решение.

1 Ответ

8 голосов
/ 02 апреля 2010

Python 2.6 имеет функцию itertools.product(), которая делает то, что вы хотите:

import itertools
v = (a, b, c)
for d, e, f in itertools.product(*(generate(x) for x in v)):
  print d, e, f

Из документов:

Декартово произведение входных итераций.

Эквивалент вложенных циклов for в выражении генератора.Например, product (A, B) возвращает то же, что и ((x, y) для x в A для y в B).

...