Представьте, что у вас есть два списка.Python: всякая возможная дискретная функция в двух списках
list1 = ['a', 'b', 'c']
list2 = ['x', 'y']
, что это функция, которая дает Вам все возможные функции из области list1 в кообласть list2? Ответ в этом случае будет
[ [('a', 'x'), ('b', 'y')],
[('a', 'x'), ('c', 'y')],
[('b', 'x'), ('a', 'y')],
[('b', 'x'), ('c', 'y')],
[('c', 'x'), ('a', 'y')],
[('c', 'x'), ('b', 'y')] ]
Это более общий случай this question and answer, который является ответом на этот вопрос, когда песни1 и песни2 имеют одинаковый размер.
Предположим, вы не знаете, что больше, и любой из них может быть 0, 1 или многими элементами. Предпочтительно это должно быть выражено как некоторая комбинация функций itertools.
--EDITS--
Лучшее, что я до сих пор является:
def everyPossibleAssignment(A, B):
if len(A) < len(B): return [list(zip(A, P)) for P in permutations(B, len(A))]
else: print "A must be smaller in size than B"
, но я уверен, что лучше.
Если 'list1' - это домен, то ваши функции не должны характеризоваться тремя парами (a ->?, b ->?, c ->?), а не два? – senshin
Откуда у? –
['продукт' от itertools] (https://docs.python.org/2/library/itertools.html#itertools.product) –