函数期望列表却返回整数:排列生成代码类型错误排查
全排列代码错误分析与修复
错误原因
问题出在递归终止条件的返回值上:当len(units) == 1时,你返回的是units(比如[0]),这是一个包含单个整数的列表。但后续递归调用时,代码会遍历这个返回值——直接取到列表里的整数元素0,此时[i] + p就变成了列表与整数拼接,自然触发TypeError。
你的预期是每个递归返回的都是排列的列表集合,所以终止条件也应该返回一个包含单元素排列的列表,而非单元素本身的列表。
修复后的代码
def permutations(units): permutation_list = [] if len(units) == 1: return [units] # 修改为返回包含列表的列表 else: for i in units: new = [j for j in units if j != i] for p in permutations(new): permutation_list.append([i] + p) return permutation_list print(permutations([0,1,2,3]))
修复说明
- 调整终止条件返回值:输入
[0]时返回[[0]],这样后续递归遍历得到的p是[0],可以和[i]正常拼接成新的排列列表。 - 替换列表推导式为普通循环:列表推导式的设计目的是生成新列表,而非执行
append这类副作用操作,改用普通循环后代码可读性更强,也避免生成无用的临时列表。
内容的提问来源于stack exchange,提问作者Buhiii
相关产品推荐
相关产品推荐

