def perms(elements): if len(elements) =1: yield elements else: for perm in perms(elements[1:]): for i in range(len(elements)): yield perm[:i] + elements[0:1] + perm[i:] for item in list(perms([1, 2, 3,4])): print (item)
perm本来就是从perms中迭代来的。就是perms中的每一个元素啊。
为什么还可以perm[:i]这不是对数列进行切片吗?
但是perm不就是一个数?怎么切啊?!!!
如果可以解释下这个递归小函数那就万分感谢
for perm in perms(elements[1:]):
//perms是个生成器,for循环可以获取生成器中所有的迭代值,并且每个值都是一个list,所以完全可以使用切片操作
yield perm[:i] + elements[0:1] + perm[i:]
//这个意思就是将element的第一个元素放到list的不同的位置 得到所有元素的全排列
for perm in perms...perms返回的是iterable的数据。
所以,可以理解为这是一个单一元素的可迭代LIST。
我也是新手,我是这么理解的。具体的也没有明白,请高手回复下。
for perm in perms(elements[1:]): for i in range(len(elements)): yield perm[:i] + elements[0:1] + perm[i:]
可以解释成对element[1:]做全排列
再遍历得到的全排列中的每一个数组
然后把element的第一个元素放到数组的不同位置从而得到整个element的全排列
谢谢,明白了