You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于字典整数键生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:50:27