| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Python 組合せと順列の計算

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

Python 組合せと順列の計算

Python |

組合せと順列を計算してみる

サンプル
  1. # -*- encoding:utf-8 -*-
  2. import copy
  3.  
  4. def combination(elem):
  5. 組合せ
  6. for i,v in enumerate(elem):
  7. for v2 in elem[i+1:]:
  8. print (v, v2)
  9.  
  10. def permutation(slot,elem, size):
  11. 順列
  12. if len(elem) == 1:
  13. slot[size - 1] = elem[0]
  14. print slot
  15. else:
  16. for i,v in enumerate(elem):
  17. slot[size - len(elem)] = v
  18. e2 = copy.copy(elem)
  19. e2.remove(v)
  20. permutation(slot, e2, size)
  21. return
  22.  
  23. if __name__ == '__main__':
  24. elem = range(4)
  25. slot = [-1 for x in elem]
  26.  
  27. combination(elem)
  28. permutation(slot, elem, len(elem))
結果
  1. (0, 1)
  2. (0, 2)
  3. (0, 3)
  4. (1, 2)
  5. (1, 3)
  6. (2, 3)
  7. [0, 1, 2, 3]
  8. [0, 1, 3, 2]
  9. [0, 2, 1, 3]
  10. [0, 2, 3, 1]
  11. [0, 3, 1, 2]
  12. [0, 3, 2, 1]
  13. [1, 0, 2, 3]
  14. [1, 0, 3, 2]
  15. [1, 2, 0, 3]
  16. [1, 2, 3, 0]
  17. [1, 3, 0, 2]
  18. [1, 3, 2, 0]
  19. [2, 0, 1, 3]
  20. [2, 0, 3, 1]
  21. [2, 1, 0, 3]
  22. [2, 1, 3, 0]
  23. [2, 3, 0, 1]
  24. [2, 3, 1, 0]
  25. [3, 0, 1, 2]
  26. [3, 0, 2, 1]
  27. [3, 1, 0, 2]
  28. [3, 1, 2, 0]
  29. [3, 2, 0, 1]
  30. [3, 2, 1, 0]

組み合わせの数

  1. def combi(n ,r):
  2. p = 1
  3. for i in range(1, r+1):
  4. p = p * (n - i + 1) / i
  5. return p
  6.  
  7. if __name__ == "__main__":
  8. print combi(4, 2)

==

  1. 6

1行

  • Pytho3.x では、functioolsのimportが必要、2.7xでは不要
  1. >>> from functools import reduce
  2. >>> cmb = lambda n,r:reduce(lambda x,y:x*y,range(n,n-r,-1))/reduce(lambda x,y:x*y,range(r,1,-1))
  3. >>> cmb(7,3)
  4. 35.0