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

我正在尝试一种解决以下问题的有效方法:

鉴于我要创建所有组合列表的任何两个数组'a'和'b',每个组合都应包含来自'a'的一个元素和来自'b'的一个元素的元组

例如:

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

输出应为以下内容:

[{'p': False,'q': False},{'p': False,'q': True},{'p': True,'q': 
False},'q': True}]
waltc 回答:从两个数组创建所有可能的组合

嘿,您可以将itertools.productrepeat=2一起使用

这是一个有效的示例,可建立词典列表

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

dicts = [{k:v for k,v in zip(keys,tup)} for tup in list(product(values,repeat=len(keys)))]
,
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': 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},'r': True,'s': True,'t': True},'q': True,'t': True}]
本文链接:https://www.f2er.com/3168144.html

大家都在问