从两个数组创建所有可能的组合

Creating all possible combinations from two arrays

我正在想办法解决以下问题:

给定任意两个数组 'a' 和 'b' 我想创建所有组合列表,每个组合应包含 'a' 中的一个元素和 'a' 中的一个元素的元组=21=]

例如:

a = ['p', 'q'], b = [True, False]

输出应如下所示:

[{'p': False, 'q': False}, {'p': False, 'q': True}, {'p': True, 'q': 
False}, {'p': True, 'q': True}]
from itertools import product

dicts = [{k:v for k,v in zip(keys, tup)} for tup in list(product(values, repeat=len(keys)))]

嘿,你可以将 itertools.productrepeat=2

一起使用

这是一个构建字典列表的工作示例

[{k1:v1, k2:v2} for k1,v1,k2,v2 in itertools.product(a,b,repeat=2) if k1 != k2]
a = ['p', 'q']

b = [True, False]
import itertools
result = [{values[0]: values[1]} for values in list(itertools.product(a,b))]

print(result)

这是你需要的吗?

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}]

编辑:

既然你说 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': 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}]