下面是我编写的用于从列表中生成所有排列的代码。
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/