学術的な質問だと思いますが、2番目の結果は私には意味がありません。最初のように完全に空にすべきではありませんか?この動作の理論的根拠は何ですか?
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) ] # [()]
更新
すべての回答に感謝します-非常に有益です。
ウィキペディアのヌルデカルト積に関する議論は、決定的なステートメントを提供します。
セットなしのデカルト積...は、空のタプルを含むシングルトンセットです。
そして、 sthからの洞察に満ちた答えを処理するために使用できるいくつかのコードがあります:
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