プログラミング入門II
2026.01.15
リスト その2
print(*list1) print(*list2) print(*sum_list) |
相変わらず上のようなものが出てきました.これまで数値の桁揃えは何度も体験しているのに,なんで無視するのでしょうかねえ.当然ですが,結果の表示は以下のようになり減点です.もういいかげんやめませんか?
57 30 54 66 18 21 75 73 15 46 4 44 87 72 81 32 17 43 58 62 61 74 141 138 99 53 92 116 73 108 |
リストの生成,並べ替えなどを学習しました.インデックスを使用して要素にアクセスすることも行いました.要素の操作はスライスでも可能でした.それらの操作においては,便利なメソッドが標準で多数用意されていますので,それらの活用で処理を簡単に書くことができるのがPythonの利点です.今後も活用していきましょう.
今回も引き続きリストです.なかなか難しい作業が続きますが,演習問題を通して理解を進めましょう.
前回の演習問題でも要素の一覧を簡単に出力する方法であるアンパックを使用しました.今回もそれを使う方法も確認しておきましょう.教科書 p.202 の Column 7-4 の中に print 関数に与える引数にアスタリスク * をつけてスペース区切りで表示する方法が紹介されています.以下の例で試してみてください.
lst = [1, 2, 3] print(lst) print(*lst) print(*lst[1:]) |
上の最後の行にあるように,スライスを上手に使うと任意の範囲の要素も簡単に表示できます.
教科書では行列を扱う例が紹介されています.リストの中にリストが入っている入れ子の状態です.演習問題では機械学習で使用される畳み込みに関係する例題を行います.
リストを生成するときに,前回の範囲では None を使うか,insert メソッドを使いました.リストは通常複数の要素を持ちますので,生成後に反復処理により値を代入する例を見てきました.今回学習する内包表記はリストの生成時に [ ] の中に for 文を入れて,生成と値の代入を同時に行うものです.演習問題の後半で2次元のリストを扱いますが,その際の内包表記は結構混乱しがちですので,教科書 p.193 の Fig.7-23 の b および p.195 の Fig.7-25 の b をよく見て理解していきましょう.
2次元の空のリストを作るときに以下のような間違いをしがちなので,注意してください.
none_lst = [[None] * 5] * 5 print(none_lst) |
実行すると確かに以下のように2次元で5×5のNoneのリストはできます.
| [[None, None, None, None, None], [None, None, None, None, None], [None, None, None, None, None], [None, None, None, None, None], [None, None, None, None, None]] |
ただし,後から値を代入すると変なことになります.
none_lst = [[None] * 5] * 5
for i in range(5):
for j in range(5):
none_lst[i][j] = i + j
print(none_lst)
|
| [[4, 5, 6, 7, 8], [4, 5, 6, 7, 8], [4, 5, 6, 7, 8], [4, 5, 6, 7, 8], [4, 5, 6, 7, 8]] |
今回の演習問題です.
宿題はいつものようにMoodleを使用します.今回も明日火曜日の10:00以降に閲覧可能となりますので,期限内の提出をよろしくお願いします.締め切りは19日の13:00です.
次回は教科書 p.204 - 240 のタプル,集合,辞書です.また,リストに関する確認テストもありますので,準備をよろしくお願いします.