全排列代码python_python全排列代码,求解释
匿名用戶
1級
2016-03-18 回答
this performs the same function as itertools.permutations
for i in range(len(l)):
s=l[:i]+l[i+1:]
These two lines can iterate all cases of permutations(order not considered) of the list's sublist of (len(list)-1)
So, like you have [1,2,3]
By this, you can iterate through:
[2,3], [1,3], [1,2]
Then you recurse it till the list is of length 1.
p = perm(s)
so, for [2,3], you get [2] and [3]
for [1,3], you get [1] and [3]
for [1,2], you get [1, 2]
Then these codes considers the order.
for x in p:
r.append(l[i:i+1]+x)
After this two processing, you can get [2,3] and [3,2] from [2,3]
[2,3] + [1] = [2,3,1]
[3,2] + [1] = [3,2,1]
So you get all cases when 2,3 is the first two of the permutations.
Well, hope this helps you.
Also, this is a equivalent function of permutations :
This returns an iterable, and I believe it is more efficient.
def permutations(iterable, r=None):
# permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
# permutations(range(3)) --> 012 021 102 120 201 210
pool = tuple(iterable)
n = len(pool)
r = n if r is None else r
if r > n:
return
indices = range(n)
cycles = range(n, n-r, -1)
yield tuple(pool[i] for i in indices[:r])
while n:
for i in reversed(range(r)):
cycles[i] -= 1
if cycles[i] == 0:
indices[i:] = indices[i+1:] + indices[i:i+1]
cycles[i] = n - i
else:
j = cycles[i]
indices[i], indices[-j] = indices[-j], indices[i]
yield tuple(pool[i] for i in indices[:r])
break
else:
return
追問:
Then these codes considers the order.
order 是怎么產(chǎn)生的,麻煩再回答一下啦
總結(jié)
以上是生活随笔為你收集整理的全排列代码python_python全排列代码,求解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: winform listview 设置选
- 下一篇: python中calendar模块常用方