假设我有一份清单
my_list = [a, b, c]和一本字典
my_dict = dict({a:a_prime, b:b_prime, c:c_prime})其中,所有字母、letter_prime都是整数。如何找到创建与字典相关的唯一列表的所有组合?在上面的例子中,我想要一个接受a,b,c,my_dict作为输入的函数
magic_function([a,b,c], my_dict)
.
.
.
return [[a_prime, b, c], [a, b_prime, c], [a, b, c_prime], [a_prime, b_prime, c], [a_prime, b, c_prime], [a, b_prime, c_prime], [a_prime, b_prime, c_prime]]也有独特的im引用:
我认为a_prime,b,c,b,c,a_prime是相等的,也就是说,顺序不等于数。
并且可能是一些组合是相同的,例如,a_prime,b,c最终也等于a,b_prime,c_prime。如果只返回其中的一个就好了。
发布于 2019-12-21 23:41:30
您可以创建所有可能的掩码,以告知我们是否在dict中选择键或相应值:
from itertools import product
my_dict = {'a': 'a_prime', 'b': 'b_prime', 'c': 'c_prime'}
def magic(keys):
out = []
for key_or_val in product([True, False], repeat=len(keys)):
out.append([key if k_v else my_dict[key] for key, k_v in zip(keys, key_or_val)])
return out
print(magic(['a', 'b', 'c']))
# [['a', 'b', 'c'], ['a', 'b', 'c_prime'], ['a', 'b_prime', 'c'], ['a', 'b_prime', 'c_prime'],
# ['a_prime', 'b', 'c'], ['a_prime', 'b', 'c_prime'], ['a_prime', 'b_prime', 'c'],
# ['a_prime', 'b_prime', 'c_prime']]如果您只想要唯一的值,只需使用一个集合:
uniques = set(tuple(combination) for combination in magic(['a', 'b', 'c']))发布于 2019-12-21 23:39:28
您可以对生成器使用递归:
my_list = ['a', 'b', 'c']
def combos(d, c = []):
if len(c) == len(my_list):
yield c
elif d:
yield from combos(d[1:], c+[d[0]])
yield from combos(d[1:], c+[f'{d[0]}_prime'])
print(list(combos(my_list)))输出:
[['a', 'b', 'c'], ['a', 'b', 'c_prime'], ['a', 'b_prime', 'c'], ['a', 'b_prime', 'c_prime'], ['a_prime', 'b', 'c'], ['a_prime', 'b', 'c_prime'], ['a_prime', 'b_prime', 'c'], ['a_prime', 'b_prime', 'c_prime']]发布于 2019-12-21 23:56:51
my_list = ["a", "b", "c"]
my_dict = dict({"a": "a_prime", "b": "b_prime", "c": "c_prime"})从上面的例子中,我注意到您不希望在相同的输出中有键值对,所以我们通过创建集合来分隔它们。在创建我们的集合时,我们将为每个可能的组合选择key或value。
my_coll = [[key, my_dict[key]] for key in my_list]
Output:
>> [['a', 'a_prime'], ['b', 'b_prime'], ['c', 'c_prime']]最后,我们可以使用itertools产品来获得示例中提到的描述输出。
from itertools import product
combinations = [list(x) for x in product(*my_coll)]
Output:
>> [['a', 'b', 'c'], ['a', 'b', 'c_prime'], ['a', 'b_prime', 'c'], ['a', 'b_prime', 'c_prime'], ['a_prime', 'b', 'c'], ['a_prime', 'b', 'c_prime'], ['a_prime', 'b_prime', 'c'], ['a_prime', 'b_prime', 'c_prime']]https://stackoverflow.com/questions/59437449
复制相似问题