从N个里取C个的排列组合:
def combination(n,c,com=1,limit=0,per=[]):
for pos in range(limit,n):
t = per + [pos]
if len(set(t)) == len(t):
if len(t) == c:
yield [pos,]
else:
for result in combination(n,c,com,com*pos, per + [pos,]):
yield [pos,] + result
print("排列:")
for res in combination(3,3,0):
print(res)
print("组合:")
for res in combination(3,3):
print(res)
结果:
排列:
[0, 1, 2]
[0, 2, 1]
[1, 0, 2]
[1, 2, 0]
[2, 0, 1]
[2, 1, 0]
组合:
[0, 1, 2]
排列就是每次都从0开始选,组合的话,后一个必须大于前一个,combination第三个参数com表示是排列还是组合,因为函数名是combination,所以缺省是组合。
检查的话:无论排列还是组合,都不能重复,就是把列表变成词典,看看长度是否一样,不一样了就是有重复元素,不应该放到结果中