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

Python列表排列生成代码报错:TypeError问题排查求助

问题分析与解决

这个报错的根源是你递归终止条件的返回值不符合后续拼接的预期,咱们一步步拆解:

错误原因

当递归到最底层(len(arr)==1)时,你返回的是arr(比如['a']),而不是包含这个列表的列表(也就是[['a']])。这会导致上层递归的for p in perm(xs)循环直接遍历['a']里的元素——也就是字符串'a',而不是遍历一个包含排列结果的列表。

举个实际的执行场景:
当处理perm(['b','c'])时,会取x='b',xs=['c'],然后调用perm(['c'])返回['c']。此时for p in perm(['c'])会把p赋值为字符串'c',接下来执行['b'] + p,这就触发了TypeError——列表和字符串不能直接拼接。

同样,len(arr)==0时返回[]也是有问题的,因为递归时需要一个包含空排列的列表([[]])来让上层循环正常执行。

修正后的代码

只需要调整两个终止条件的返回值:

def perm(arr):
    if len(arr) == 1:
        return [arr]  # 返回包含单个排列的列表
    if len(arr) == 0:
        return [[]]   # 返回包含空排列的列表
    else:
        result = []
        for i in range(len(arr)):
            x = arr[i]
            xs = arr[:i] + arr[i+1:]
            for p in perm(xs):
                result.append([x] + p)
        return result

print(perm(['a', 'b', 'c']))

验证结果

运行修正后的代码会输出正确的全排列:

[['a', 'b', 'c'], ['a', 'c', 'b'], ['b', 'a', 'c'], ['b', 'c', 'a'], ['c', 'a', 'b'], ['c', 'b', 'a']]

内容的提问来源于stack exchange,提问作者zesla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:07:59