如何通过Python递归实现从多组字符串列表参数生成所有可能的字符串组合
递归生成所有组合字符串列表的实现方案
当然有可行的实现思路啦!递归的核心就是把复杂的组合问题拆解成一个个更小的子问题,咱们一步步来拆解:
核心思路
- 终止条件:当只剩最后一组元素(比如只剩
SHAPES),直接返回这组元素作为基础组合;如果没有任何输入列表,返回空列表。 - 递归步骤:每次取出第一组元素,然后递归处理剩下的所有组,得到后续组的所有组合结果;再把当前组的每个元素和后续组的每个组合结果拼接起来,形成完整的组合字符串。
实现代码
SIZES = ['small', 'medium', 'long'] COLORS = ['red', 'blue', 'green'] SHAPES = ['circle', 'triangle', 'square'] def string_concatenation(*args): # 终止条件1:没有输入列表,返回空列表 if not args: return [] # 终止条件2:只剩一个列表,返回该列表的元素 if len(args) == 1: return args[0].copy() # 取出第一个列表和剩下的所有列表 first_list = args[0] rest_combinations = string_concatenation(*args[1:]) # 拼接当前元素和后续组合 result = [] for item in first_list: for combo in rest_combinations: result.append(f"{item} {combo}") return result # 测试调用,会输出你需要的完整组合列表 print(string_concatenation(SIZES, COLORS, SHAPES))
代码解释
- 当调用
string_concatenation(SIZES, COLORS, SHAPES)时,函数首先取出SIZES作为第一组,然后递归调用string_concatenation(COLORS, SHAPES)。 - 在递归调用中,取出
COLORS作为第一组,再递归调用string_concatenation(SHAPES),这时候触发终止条件,返回SHAPES的所有元素。 - 接着把
COLORS的每个元素和SHAPES的元素拼接,得到类似['red circle', 'red triangle', ..., 'green square']的中间组合列表。 - 最后回到最外层,把
SIZES的每个元素和上面得到的中间列表中的每个字符串拼接,就得到了所有完整的组合。
这样就能生成你需要的所有可能组合的字符串列表啦,完全不需要用到itertools库~
内容的提问来源于stack exchange,提问作者R. Bogdan
相关产品推荐
相关产品推荐

