我希望能够生成有条件的产品。与此答案非常相似: 列表列表的所有组合
我想用itertools.product(*listOfLists)
. 但是,我的问题是,从一个列表中包含一个元素意味着必须为该产品咨询其他列表。
例子:
colors = ['red', 'blue', 'green']
fruits = ['apple', 'orange', 'banana']
locations = ['indoors', 'outdoors']
indoor_choices = ['bathroom', 'bedroom', 'kitchen']
green_choices = ['forest', 'light', 'dark']
在这里,我们要始终考虑颜色、服装和位置的所有可能选择。然而,在'indoor'的情况下,我们也想考虑indoor_choices,而在'green'是一个可能的选择的情况下,我们也想选择更具体的绿色。这是一种可能性树,其中一些分支继续分支,而其他分支则没有。
所以在上面这个愚蠢的例子中,你可以像这样做一个 for 循环:
for c in colors:
for f in fruits:
for l in locations:
# etc
但是随后我们遇到了一个问题,即当两个不同的类别可能基于此选择进行分支时会发生什么。
一个简单(hacky)的解决方案就是手动编码条件并在其中放置 for 循环:
for c in colors:
for f in fruits:
for l in locations:
if c == 'green' and l == 'indoor':
for gc in green_choices:
for ic in indoor_choices:
# output
elif c == 'green':
for gc in green_choices:
# output
elif l == 'indoor':
for gc in green_choices:
# output
else:
# output
但是想象一下当有 N 个列表,其中 M 个有额外的分支时的恐怖。或者更糟糕的是,还有嵌套的附加分支......基本上这个黑客无法扩展。
有任何想法吗?事实证明,这个问题本身就具有欺骗性的难度!