2024-06-28 21:14:19 发布
网友
我理解代码的要旨,即它形成排列;但是,我想知道是否有人可以解释return语句中到底发生了什么。在
def perm(l): sz = len(l) print (l) if sz <= 1: print ('sz <= 1') return [l] return [p[:i]+[l[0]]+p[i:] for i in range(sz) for p in perm(l[1:])]
看看这个:
>>> l = [1, 2, 3, 4, 5, 6] >>> p = l[1:] >>> p [2, 3, 4, 5, 6] >>> i = 3 >>> p[:i] [2, 3, 4] >>> p[i:] [5, 6] >>> p[:i]+[l[0]]+p[i:] [2, 3, 4, 1, 5, 6] >>>
所以,这里有一件事,p代表l[1:]的所有排列(即l减去第一个元素)。接下来,i是range(sz),这意味着它从0到l的长度不等。这将把p拆分为两个所有可能大小的列表(0和sz,1和sz-1,2和sz-2,等等),并在这两个列表之间插入l的第一个元素——没有被置换的元素。在
p
l[1:]
l
i
range(sz)
return语句使用列表理解。如果将其放入实际循环中,则更容易理解:
value = [] for i in range(sz): # call this function using all but the first item in l for p in perm(l[1:]): # now place the first item in l between index i-1 and index i in p value.append(p[:i] + [l[0]] + p[i:]) return value
看看这个:
所以,这里有一件事,
p
代表l[1:]
的所有排列(即l
减去第一个元素)。接下来,i
是range(sz)
,这意味着它从0到l
的长度不等。这将把p拆分为两个所有可能大小的列表(0和sz,1和sz-1,2和sz-2,等等),并在这两个列表之间插入l
的第一个元素——没有被置换的元素。在return语句使用列表理解。如果将其放入实际循环中,则更容易理解:
相关问题 更多 >
编程相关推荐