我定义了一个字典,该字典给出了元组的其他选择列表:
d = {(2, 1): [(2, 1)],
(1, 2): [(1, 2)],
(2, 0.5): [(2, 1), (2, 0.5)],
(0.5, 2): [(0.5, 2), (1, 2)],
(0.5, 0.5): [(0.5, 0.5), (1, 1), (0.5, 1), (1, 0.5)],
(1, 1): [(1, 1), (0.5, 0.5)]}
例如:
(1, 1)
可以是(1, 1)
或(0.5, 0.5)
。 (2, 1)
只能是(2, 1)
。 我也有一个元组列表(此列表中的每个元组始终是字典d
的键)。例如:
lst = [(2, 1), (1, 1), (1, 1)]
我想使用字典d
提供的替代值列出此列表的所有替代项。
例如,lst
的替代方案将是:
[(2, 1), (1, 1), (1, 1)]
[(2, 1), (0.5, 0.5), (0.5, 0.5)]
[(2, 1), (0.5, 0.5), (1, 1)]
[(2, 1), (1, 1), (0.5, 0.5)]
我确定我可以使用itertools和lambdas来做到这一点,但暂时没有找到任何解决方案。
答案 0 :(得分:3)
您可以使用itertools product获得所需的输出。
d = {(2, 1): [(2, 1)],
(1, 2): [(1, 2)],
(2, 0.5): [(2, 1), (2, 0.5)],
(0.5, 2): [(0.5, 2), (1, 2)],
(0.5, 0.5): [(0.5, 0.5), (1, 1), (0.5, 1), (1, 0.5)],
(1, 1): [(1, 1), (0.5, 0.5)]}
lst = [(2, 1), (1, 1), (1, 1)]
from itertools import product
result = list(product(*(d[k] for k in lst)))
这将产生一个元组列表。如果您希望将所有值都作为列表,则可以通过这种方式进行迭代和访问。
for val in result:
print(list(val))
#Output:
[(2, 1), (1, 1), (1, 1)]
[(2, 1), (1, 1), (0.5, 0.5)]
[(2, 1), (0.5, 0.5), (1, 1)]
[(2, 1), (0.5, 0.5), (0.5, 0.5)]