数学における順列と組み合わせは以下の公式で計算されることはすでに学習していると思います.
乱数を用いて 10 から 20 の整数のどれかを発生させて m とし,5 から 10 の数を n としたとき,以下のように mPn と mCn を計算するプログラムを階乗計算を関数にして作成しましょう.
15P9 = 1816214400 15C9 = 5005 |
解答例1 (再帰使用)
解答例2(反復処理使用)
教科書 p.290 にある map 関数とラムダ式の説明を参考に,2桁正の整数 10 個を要素に持つリストを作成し,続いて,各要素の値を2倍したリストを作成してみましょう.
[61, 94, 33, 72, 62, 90, 86, 94, 34, 63] [122, 188, 66, 144, 124, 180, 172, 188, 68, 126] |
5×2の要素を持つ2次元のリストを作ります.内側の要素が2個のリストの2番目(インデックスとしては1番目)の要素が大きい順にリストを並べ替えてみましょう.ラムダ式を使いますが,どの要素で並べ替えるかを key で指定します.
lst = sorted(lst, key = lambda x: x[1]) |
[[65, 21], [11, 52], [78, 61], [92, 65], [94, 53]] [[92, 65], [78, 61], [94, 53], [11, 52], [65, 21]] |
5月14日の演習問題の i. の成績ソートを関数版にしてみましょう.今回は乱数でどの科目で並べ直すかを指定する形式とします.
並べ替える科目名を覚えておくために以下の科目名リストも用意します.
course = [' Eng', 'Math', 'Phys'] |
No. Eng Math Phys Total 1 82 76 8 166 2 72 28 72 172 3 22 47 47 116 4 35 56 21 112 5 56 77 33 166 6 34 73 33 140 7 87 36 15 138 8 43 63 4 110 9 70 15 58 143 10 16 46 86 148 Sort score by Phys No. Eng Math Phys Total 10 16 46 86 148 2 72 28 72 172 9 70 15 58 143 3 22 47 47 116 5 56 77 33 166 6 34 73 33 140 4 35 56 21 112 7 87 36 15 138 1 82 76 8 166 8 43 63 4 110 |
ラムダ式を使用し,sorted 関数に key を与えることで並べ替える操作の関数を簡単に作れます.解答例
0から9までの整数を乱数により20個発生させます.また別にターゲットとなる数として0から9の整数をどれか1つ発生させます.ターゲットの数が何個出たかを数えるプログラムをラムダ式と filter 関数を使用して作成しましょう.
Numbers: 5 7 3 7 3 3 7 8 9 1 2 9 9 5 8 7 3 7 1 2 Target number: 2 Frequency: 2 |
filter 関数でチェックしてできたリストの長さを見れば,何回出たかがわかります.解答例