Что должен дать itertools.product (), когда предоставлен пустой список?
Я думаю, это академический вопрос, но второй результат не имеет смысла для меня. Разве он не должен быть таким же пустым, как первый? В чем причина такого поведения?
from itertools import product
one_empty = [ [1,2], [] ]
all_empty = []
print [ t for t in product(*one_empty) ] # []
print [ t for t in product(*all_empty) ] # [()]
Обновления
Спасибо за все ответы - очень информативно.
Обсуждение Википедии оНуллярное декартово произведение дает окончательное утверждение:
Декартово произведение без множеств ... это одноэлементное множество, содержащее пустой кортеж.
А вот некоторый код, который вы можете использовать для работы с проницательнымответ от чего:
from itertools import product
def tproduct(*xss):
return ( sum(rs, ()) for rs in product(*xss) )
def tup(x):
return (x,)
xs = [ [1, 2], [3, 4, 5] ]
ys = [ ['a', 'b'], ['c', 'd', 'e'] ]
txs = [ map(tup, x) for x in xs ] # [[(1,), (2,)], [(3,), (4,), (5,)]]
tys = [ map(tup, y) for y in ys ] # [[('a',), ('b',)], [('c',), ('d',), ('e',)]]
a = [ p for p in tproduct( *(txs + tys) ) ]
b = [ p for p in tproduct( tproduct(*txs), tproduct(*tys) ) ]
assert a == b