【发布时间】:2020-08-12 16:16:35
【问题描述】:
给定两个任意长度的列表,我想找到两个列表之间所有可能的组合,然后在新列表中添加该组合的字典对。
例如,这两个列表是:
List1 - ['A', 'B']
List2 - [1, 2]
结果列表应具有以下值:
[{'A':1, 'B':1}, {'A':1,'B':2}, {'A':2, 'B':1}, {'A':2, 'B':2}]
我找到的所有解决方案都只是给出了可能的组合。所以,假设我有一个长度为 3 和 2 的列表。可能的组合只有 6 个值。但是,根据我的要求,应该有 8 个值。
我使用的代码:
first_list = ['A', 'B', 'C']
second_list = [1, 2]
combinations = [(a,b) for a in first_list for b in second_list]
输出如下:
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]
虽然我想要的输出是:
[{'A':1, 'B':1, 'C':1},
{'A':1, 'B':1, 'C':2},
{'A':1, 'B':2, 'C':1},
{'A':1, 'B':2, 'C':2},
{'A':2, 'B':1, 'C':1},
{'A':2, 'B':1, 'C':2},
{'A':2, 'B':2, 'C':1},
{'A':2, 'B':2, 'C':2}]
【问题讨论】:
-
请用您尝试过的代码更新您的问题。
-
这些不是组合,而是笛卡尔积的元素。因此,您可以使用
itertools.product。另外——导致 8 个而不是 6 个“组合”的要求是模糊的。请澄清。为什么不使用 3 和 2 的预期输出示例? -
您已对其进行了编辑,但您未指定的要求导致在
(3,2)情况下预期输出 8 个元素而不是 6 个元素仍然是模糊的。您的示例的实际预期输出是什么? -
我也编辑了所需的输出。