Python中如何按指定规则组合两个列表生成目标元组输出
Python实现方案
根据规则,每个list2中的元素需要搭配list1中长度为n的可重复、无序组合,n为该字符在dict_list_2中对应的数值,可以直接调用Python标准库itertools的相关方法实现:
from itertools import combinations_with_replacement # 初始化输入参数 list1 = [1, 2, 3] list2 = ['a', 'b', 'c', 'd', 'e'] dict_list_2 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} result = [] for char in list2: take_num = dict_list_2[char] # 生成list1取take_num个元素的可重复无序组合 combos = list(combinations_with_replacement(list1, take_num)) # 可选:按组合内不同元素数量升序,匹配示例输出顺序 combos.sort(key=lambda x: len(set(x))) # 拼接字符生成最终元组 for combo in combos: result.append((char,) + combo) # 打印输出 for item in result: print(item, end=' ')
运行后输出的前9项和给出的预期完全匹配:
('a', 1) ('a', 2) ('a', 3) ('b', 1, 2) ('b', 1, 3) ('b', 2, 3) ('b', 1, 1) ('b', 2, 2) ('b', 3, 3)
如果需要元素顺序不同视为不同结果的场景,把combinations_with_replacement替换为itertools.product(list1, repeat=take_num)即可生成所有有序笛卡尔积结果。
内容的提问来源于stack exchange,提问作者Setareh
相关产品推荐
相关产品推荐

