题如下
您必须创建输入字符串的所有排列并删除重复项(如果存在)。
这意味着,您必须以所有可能的顺序打乱输入中的所有字母。
1.for j in permutations(string[0:i] + string[i + 1:]):是递归吗
2.return list("".join(p)..那一行看8懂
def permutations(string):
total = []
if len(string) <= 1:
return [string]
for i in range(len(string)):
for j in permutations(string[0:i] + string[i + 1:]):
total.append(string[i] + j)
return list(set(total))
print(permutations('aabb'))
import itertools
def permutations(string):
return list("".join(p) for p in set(itertools.permutations(string)))
print(permutations('aabb'))
1.是递归,它的逻辑是这样的:取出string的每一个字母(第一重循环),将剩下的字母全排列(即递归调用),把取出的字母和剩下字母的全排列拼在一起就是所有字母的全排列,然后返回列表
2.itertools是python自带的模块,itertools.permutations(string)用于生成一个可迭代对象的全排列,返回值是itertools.permutations对象,是由string中每一个元素的排列的元组生成的可迭代对象,set()将迭代对象中重复的值去除,"".join则是将去重后的每一个元组组成字符串