我正在尝试一种解决以下问题的有效方法:
鉴于我要创建所有组合列表的任何两个数组'a'和'b',每个组合都应包含来自'a'的一个元素和来自'b'的一个元素的元组
例如:
a = ['p','q'],b = [True,False]
输出应为以下内容:
[{'p': False,'q': False},{'p': False,'q': True},{'p': True,'q':
False},'q': True}]
我正在尝试一种解决以下问题的有效方法:
鉴于我要创建所有组合列表的任何两个数组'a'和'b',每个组合都应包含来自'a'的一个元素和来自'b'的一个元素的元组
例如:
a = ['p','q'],b = [True,False]
输出应为以下内容:
[{'p': False,'q': False},{'p': False,'q': True},{'p': True,'q':
False},'q': True}]
嘿,您可以将itertools.product与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
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}]