注册
登录
查看:328 | 回复:4
小体
取数字全排列中的小问题,求助
发表于 2023/8/2 14:33:32
楼主
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不就是一个数?怎么切啊?!!!


如果可以解释下这个递归小函数那就万分感谢

抠吗
最佳答案 发表于 2023/8/2 14:36:08
沙发

for perm in perms(elements[1:]):

//perms是个生成器,for循环可以获取生成器中所有的迭代值,并且每个值都是一个list,所以完全可以使用切片操作

yield perm[:i] + elements[0:1] + perm[i:]

//这个意思就是将element的第一个元素放到list的不同的位置 得到所有元素的全排列


可怜boy
发表于 2023/8/2 14:40:00
板凳

for perm in perms...perms返回的是iterable的数据。

所以,可以理解为这是一个单一元素的可迭代LIST。

我也是新手,我是这么理解的。具体的也没有明白,请高手回复下。


一粒蛋
发表于 2023/8/2 14:43:40
4楼
   for perm in perms(elements[1:]):
        for i in range(len(elements)):
           yield perm[:i] + elements[0:1] + perm[i:]



可以解释成对element[1:]做全排列

再遍历得到的全排列中的每一个数组

然后把element的第一个元素放到数组的不同位置从而得到整个element的全排列

小体
发表于 2023/8/2 14:44:47
5楼

谢谢,明白了

立即注册站大爷用户,免费试用全部产品
立即注册站大爷用户,免费试用全部产品