如何基于字典整数键生成Gen开头的组合字符串?
问题描述
我有一个以整数为键的字典:
{12: '2012-Q1', 13: '2014-Q2', 14: '2017-Q2', 15: '2019-Q3'}
需要为其中键12、13、14、15的所有2元到4元组合生成以Gen开头的字符串,预期输出如下:
['Gen_12_13', 'Gen_12_14', 'Gen_12_15', 'Gen_13_14', 'Gen_13_15', 'Gen_14_15', 'Gen_12_13_14', 'Gen_12_13_15', 'Gen_12_14_15', 'Gen_13_14_15', 'Gen_12_13_14_15']
我尝试使用Python的combinations函数获取所有组合,再通过循环构造目标字符串,编写了如下代码但未得到正确结果:
dict_gens = {12: '2012-Q1', 13: '2014-Q2', 14: '2017-Q2', 15: '2019-Q3'} all_gens = list(dict_gens.keys()) list_comb = list() name_comb = list() counter = 0 for item in range(2, len(all_gens)+1): combs = combinations(all_gens, item) for comb in combs: list_comb.append(comb) for comb in list_comb: if counter <= len(comb): for comb_item in comb: # print(comb_item) name = '_' + str(comb_item) counter+=1 name_comb.append('Gen'+name)
问题分析与修正
你的代码核心问题在于字符串拼接逻辑错误:
- 多余的
counter变量打乱了拼接流程,完全没有存在的必要 - 每次循环
comb_item时,name会被重新赋值,最终只保留组合中最后一个元素的拼接结果
修正后的代码简化了流程,直接在生成组合的循环中完成字符串构造:
from itertools import combinations dict_gens = {12: '2012-Q1', 13: '2014-Q2', 14: '2017-Q2', 15: '2019-Q3'} all_gens = list(dict_gens.keys()) name_comb = [] # 遍历2到4元的组合长度 for length in range(2, len(all_gens)+1): # 生成对应长度的所有组合 for comb in combinations(all_gens, length): # 将组合元素转为字符串后用下划线连接,再拼接前缀 gen_str = f"Gen_{'_'.join(map(str, comb))}" name_comb.append(gen_str) print(name_comb)
运行这段代码会得到你预期的输出:
['Gen_12_13', 'Gen_12_14', 'Gen_12_15', 'Gen_13_14', 'Gen_13_15', 'Gen_14_15', 'Gen_12_13_14', 'Gen_12_13_15', 'Gen_12_14_15', 'Gen_13_14_15', 'Gen_12_13_14_15']
内容的提问来源于stack exchange,提问作者Harsh Raithatha
相关产品推荐
相关产品推荐

