- 第一种方法:递归
- 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
- [1, 2, 3, 4]
- [2, 1, 3, 4]
- [2, 3, 1, 4]
- [2, 3, 4, 1]
- [1, 3, 2, 4]
- [3, 1, 2, 4]
- [3, 2, 1, 4]
- [3, 2, 4, 1]
- [1, 3, 4, 2]
- [3, 1, 4, 2]
- [3, 4, 1, 2]
- [3, 4, 2, 1]
- [1, 2, 4, 3]
- [2, 1, 4, 3]
- [2, 4, 1, 3]
- [2, 4, 3, 1]
- [1, 4, 2, 3]
- [4, 1, 2, 3]
- [4, 2, 1, 3]
- [4, 2, 3, 1]
- [1, 4, 3, 2]
- [4, 1, 3, 2]
- [4, 3, 1, 2]
- [4, 3, 2, 1]
- 第二种方法:python标准库
- 有1,2,3,4这4个数字,能组成多少个互不相同且无重复数字的三位数。
- import itertools
- print list(itertools.permutations([1, 2, 3,4],3))
- 源代码如下:
- #coding:utf-8
- """
- 迪艾姆python培训 黄哥改写
- """
- import itertools
- print list(itertools.permutations([1, 2, 3,4],3))
- 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
- 第三种:看看官方文档上写的代码
- 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
- for item in list(permutations([1, 2, 3,4],3)):
- print item
- 第四种 递归求m个list中,n个
- def perm(items, n=None):
- if n is None:
- n = len(items)
- for i in range(len(items)):
- v = items[i:i+1]
- if n == 1:
- yield v
- else:
- rest = items[:i] + items[i+1:]
- for p in perm(rest, n-1):
- yield v + p
- #该片段来自于http://www.codesnippet.cn/detail/280220148830.html
来源: http://www.codesnippet.cn/detail/280220148830.html