【发布时间】:2021-05-06 13:48:10
【问题描述】:
如何使用 itertools 或类似工具获得以下预期结果? itertools.product 与 Boolean x Boolean x Range x Range 会产生许多不希望的结果。
A1, A2 应仅在 use_A is True 的情况下迭代
B1, B2 应仅在 use_B is True 的情况下迭代
它必须是最有效的方式,因为完整的product_config 有超过 50 亿种不同的组合。
product_config = {
'use_A': [False, True],
'A1': range(3),
'A2': range(3),
'use_B': [False, True],
'B1': range(3),
'B2': range(3)
}
# Desired results:
res = [
{'use_A': False, 'use_B': False},
{'use_A': True, 'A1': 0, 'A2': 0, 'use_B': False},
{'use_A': True, 'A1': 0, 'A2': 1, 'use_B': False},
{'use_A': True, 'A1': 0, 'A2': 2, 'use_B': False},
{'use_A': True, 'A1': 1, 'A2': 0, 'use_B': False},
{'use_A': True, 'A1': 1, 'A2': 1, 'use_B': False},
{'use_A': True, 'A1': 1, 'A2': 2, 'use_B': False},
{'use_A': True, 'A1': 2, 'A2': 0, 'use_B': False},
{'use_A': True, 'A1': 2, 'A2': 1, 'use_B': False},
{'use_A': True, 'A1': 2, 'A2': 2, 'use_B': False},
{'use_A': True, 'A1': 0, 'A2': 0, 'use_B': True, 'B1': 0, 'B2': 0},
{'use_A': True, 'A1': 0, 'A2': 1, 'use_B': True, 'B1': 0, 'B2': 1},
{'use_A': True, 'A1': 0, 'A2': 2, 'use_B': True, 'B1': 0, 'B2': 2},
{'use_A': True, 'A1': 1, 'A2': 0, 'use_B': True, 'B1': 1, 'B2': 0},
{'use_A': True, 'A1': 1, 'A2': 1, 'use_B': True, 'B1': 1, 'B2': 1},
{'use_A': True, 'A1': 1, 'A2': 2, 'use_B': True, 'B1': 1, 'B2': 2},
{'use_A': True, 'A1': 2, 'A2': 0, 'use_B': True, 'B1': 2, 'B2': 0},
{'use_A': True, 'A1': 2, 'A2': 1, 'use_B': True, 'B1': 2, 'B2': 1},
{'use_A': True, 'A1': 2, 'A2': 2, 'use_B': True, 'B1': 2, 'B2': 2},
{'use_A': False, 'use_B': True, 'B1': 0, 'B2': 0},
{'use_A': False, 'use_B': True, 'B1': 0, 'B2': 1},
{'use_A': False, 'use_B': True, 'B1': 0, 'B2': 2},
{'use_A': False, 'use_B': True, 'B1': 1, 'B2': 0},
{'use_A': False, 'use_B': True, 'B1': 1, 'B2': 1},
{'use_A': False, 'use_B': True, 'B1': 1, 'B2': 2},
{'use_A': False, 'use_B': True, 'B1': 2, 'B2': 0},
{'use_A': False, 'use_B': True, 'B1': 2, 'B2': 1},
{'use_A': False, 'use_B': True, 'B1': 2, 'B2': 2},
]
【问题讨论】:
标签: python itertools cartesian-product