Python 从两个阵列创建所有可能的组合
我正试图想出一种有效的方法来解决以下问题: 给定任意两个数组“a”和“b”,我想创建所有组合列表,每个组合应包含“a”中一个元素和“b”中一个元素的元组 例如:Python 从两个阵列创建所有可能的组合,python,arrays,iterable,Python,Arrays,Iterable,我正试图想出一种有效的方法来解决以下问题: 给定任意两个数组“a”和“b”,我想创建所有组合列表,每个组合应包含“a”中一个元素和“b”中一个元素的元组 例如: a = ['p', 'q'], b = [True, False] 输出应如下所示: [{'p': False, 'q': False}, {'p': False, 'q': True}, {'p': True, 'q': False}, {'p': True, 'q': True}] 嘿,你可以使用repeat=2 下面是一个构
a = ['p', 'q'], b = [True, False]
输出应如下所示:
[{'p': False, 'q': False}, {'p': False, 'q': True}, {'p': True, 'q':
False}, {'p': True, 'q': True}]
嘿,你可以使用repeat=2
下面是一个构建字典列表的工作示例
[{k1:v1, k2:v2} for k1,v1,k2,v2 in itertools.product(a,b,repeat=2) if k1 != k2]
这就是你需要的吗
from itertools import product
lst = [dict(zip(a,pair)) for pair in product(b,b)]
输出:
[{'p': True, 'q': True},
{'p': True, 'q': False},
{'p': False, 'q': True},
{'p': False, 'q': False}]
[{'p': True, 'q': False, 'r': False, 's': False, 't': False},
{'p': True, 'q': False, 'r': True, 's': True, 't': False},
{'p': False, 'q': False, 'r': False, 's': False, 't': True},
{'p': True, 'q': False, 'r': True, 's': False, 't': False},
{'p': False, 'q': False, 'r': True, 's': True, 't': True},
{'p': True, 'q': False, 'r': False, 's': True, 't': False},
{'p': False, 'q': False, 'r': False, 's': True, 't': True},
{'p': False, 'q': False, 'r': True, 's': False, 't': True},
{'p': False, 'q': True, 'r': False, 's': False, 't': False},
{'p': False, 'q': True, 'r': True, 's': True, 't': False},
{'p': False, 'q': True, 'r': False, 's': True, 't': False},
{'p': False, 'q': True, 'r': True, 's': False, 't': False},
{'p': True, 'q': True, 'r': True, 's': False, 't': False},
{'p': True, 'q': True, 'r': False, 's': True, 't': False},
{'p': True, 'q': True, 'r': False, 's': False, 't': False},
{'p': True, 'q': True, 'r': False, 's': False, 't': True},
{'p': True, 'q': False, 'r': False, 's': True, 't': True},
{'p': True, 'q': False, 'r': True, 's': False, 't': True},
{'p': False, 'q': False, 'r': False, 's': True, 't': False},
{'p': False, 'q': False, 'r': True, 's': False, 't': False},
{'p': True, 'q': False, 'r': False, 's': False, 't': True},
{'p': False, 'q': False, 'r': False, 's': False, 't': False},
{'p': False, 'q': False, 'r': True, 's': True, 't': False},
{'p': False, 'q': True, 'r': False, 's': True, 't': True},
{'p': False, 'q': True, 'r': True, 's': False, 't': True},
{'p': True, 'q': True, 'r': True, 's': True, 't': True},
{'p': False, 'q': True, 'r': False, 's': False, 't': True}]
编辑:
既然你说a
可以是任意长度,那么你就不需要b
from itertools import permutations
import numpy as np
a = ['p','q','r','s','t']
list1 = list(permuations(a))
set1 = {tuple(np.array(a) == np.array(i)) for i in list1}
final_list = [dict(zip(a,i)) for i in set1]
输出:
[{'p': True, 'q': True},
{'p': True, 'q': False},
{'p': False, 'q': True},
{'p': False, 'q': False}]
[{'p': True, 'q': False, 'r': False, 's': False, 't': False},
{'p': True, 'q': False, 'r': True, 's': True, 't': False},
{'p': False, 'q': False, 'r': False, 's': False, 't': True},
{'p': True, 'q': False, 'r': True, 's': False, 't': False},
{'p': False, 'q': False, 'r': True, 's': True, 't': True},
{'p': True, 'q': False, 'r': False, 's': True, 't': False},
{'p': False, 'q': False, 'r': False, 's': True, 't': True},
{'p': False, 'q': False, 'r': True, 's': False, 't': True},
{'p': False, 'q': True, 'r': False, 's': False, 't': False},
{'p': False, 'q': True, 'r': True, 's': True, 't': False},
{'p': False, 'q': True, 'r': False, 's': True, 't': False},
{'p': False, 'q': True, 'r': True, 's': False, 't': False},
{'p': True, 'q': True, 'r': True, 's': False, 't': False},
{'p': True, 'q': True, 'r': False, 's': True, 't': False},
{'p': True, 'q': True, 'r': False, 's': False, 't': False},
{'p': True, 'q': True, 'r': False, 's': False, 't': True},
{'p': True, 'q': False, 'r': False, 's': True, 't': True},
{'p': True, 'q': False, 'r': True, 's': False, 't': True},
{'p': False, 'q': False, 'r': False, 's': True, 't': False},
{'p': False, 'q': False, 'r': True, 's': False, 't': False},
{'p': True, 'q': False, 'r': False, 's': False, 't': True},
{'p': False, 'q': False, 'r': False, 's': False, 't': False},
{'p': False, 'q': False, 'r': True, 's': True, 't': False},
{'p': False, 'q': True, 'r': False, 's': True, 't': True},
{'p': False, 'q': True, 'r': True, 's': False, 't': True},
{'p': True, 'q': True, 'r': True, 's': True, 't': True},
{'p': False, 'q': True, 'r': False, 's': False, 't': True}]
你能在你的帖子中附加两个数组“a”和“b”吗?我可能可以附加它们,没有真正的限制,我只是在寻找效率。你在寻找,我不认为你会在python中找到任何更有效的东西。我一直在试着使用该库中的产品函数。但是我想不出一种方法来制作我想要的东西,而不必迭代产品并删除重复的代码values@ItamarMushkin不幸的是,没有,这会给我留下和以前一样的问题。我必须剔除我不需要的坏组合。注意,这个答案并不依赖于知道长度都是2!这就行了。然而,它确实假设值和键的数量应该是相同的,遗憾的是,我可以拥有比我更多的键values@edanpatt我更新了我的答案,现在它不需要相等的长度,我将补充,尽管这个解决方案需要2英寸的长度,我给出的是一个例子。a可以是任意长度,b在我的例子中可以是长度2,但我想假设一个一般情况,这是一个不错的开始,但不是,在这样做之后,你必须创建这个函数创建的所有可能的字典组合