python - python问题中生成列表的排列

标签 python

下面是我编写的用于从列表中生成所有排列的代码。

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)

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

我收到以下错误:

TypeError: can only concatenate list (not "str") to list

我花了很长时间试图找出原因,但我找不到。任何人都可以帮忙解释为什么上面的代码会给出这些错误吗?预先非常感谢。

最佳答案

问题出在这里:

if len(arr)==1:
    return (arr)

只有一个值的列表只有一种排列 - 列表本身。但是你的函数应该返回一个排列列表 - 换句话说,一个列表列表 - 所以你必须将它包装在另一个列表中:

if len(arr)==1:
    return [arr]

在更改之前,单元素输入的结果不是排列列表,而只是值列表:

>>> perm([1])
[1]

修改后结果正确:

>>> perm([1])
[[1]]

关于python - python问题中生成列表的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676263/

相关文章:

python - 如何将字符串分割为多个字符并将分割字符保留在返回值中?

Python多进程导致脚本重新启动

python - Python中的请求解码

Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

python - 谷歌应用引擎本地开发服务器上的 OpenID 登录

python - python 中的字节操作 (XOR)

python - 如何查找 SQLAlchemy 中列使用的 Oracle 序列的名称?

python - 奇特的数组索引到每行的不同列索引

python - 为什么 plt.imshow 比 plt.pcolor 快得多?

python - 如何用Python(Sympy)实现一个函数,实现与Wolfram Mathematica中的ToExpression相同的功能?