###### tags: `Python勉強会` # Python勉強会 第3回 解説 :::info **<第3回Web会議日程>** 2024年01月17日(水) 19:00から **<第3回の自習範囲>** **【Pythonチュートリアル】**  https://docs.python.org/ja/3/tutorial/index.html 5. データ構造 5.1. リスト型についてもう少し 5.1.1. リストをスタックとして使う 5.1.2. リストをキューとして使う 5.1.3. リストの内包表記 5.1.4. ネストしたリストの内包表記 5.2. del 文 5.3. タプルとシーケンス 5.4. 集合型 5.5. 辞書型 (dictionary) 5.6. ループのテクニック 5.7. 条件についてもう少し 5.8. シーケンスとその他の型の比較 **【スッキリわかるPython入門】**  第2章 コレクション ::: *** ## コレクション整理表 | 種類 | 括り文字と要素 | ポイント | | -------- | -------- | -------- | | リスト| **[** 値1 , 値2 , **⋯** **]** | ・異なるデータ型の要素を格納可能<br>・長さ(要素数)が可変<br>・要素の書き換え可<br>・インデックス(番号)で要素にアクセス | | タプル | **(** 値1 , 値2 , **⋯** **)** | ・異なるデータ型の要素を格納可能<br>**・要素の書き換え不可**<br>・インデックス(番号)で要素にアクセス| | 辞書 | **{** キー1 **:** 値1 , キー2 **:** 値2 , **⋯** **}** | ・異なるデータ型の要素を格納可能<br>・長さ(要素数)が可変 <br>・要素の書き換え可<br>・**キーで要素にアクセス** | | 集合型<br>(セット) | **{** 値1 , 値2 , **⋯** **}** | ・異なるデータ型の要素を格納可能<br> ・長さ(要素数)が可変<br> ・**重複する要素があっても無視される**(一意な値をもつ要素が残る)<br> ・**要素の順序は保持しない** | ※テキストp116にもまとまった表がありますので、参考にしてください *** ## 課題① ### 以下のコードの実行結果として正しいものはA~Dのどれでしょう? ``` a = [-10,1,15,20,30] a.insert(2, 5) a.append(35) a.sort(reverse = True) a.pop(-1) print(a) ``` *** **A**  [35, 30, 20, 15, 5, 1] **B**  [-10, 1, 5, 15, 20, 30] **C**  [30, 20, 15, 5, 1, -10] **D**  [35, 30, 20, 15, 2, 1] :::warning **<insert>** **`list.insert(i, x)`**  listの指定位置(i)に要素(x)を追加 **<append>** ※テキスト87p **`list.append(x)`**  listに要素(x)を追加 **<sort>** **`list.sort(*, key=None,reverse=False)`**  元のリスト自体を並び替え  key=abs とすると絶対値で並び替え  reverse=True/False で昇順降順切り替え **<pop>** **`list.pop(i)`**  指定位置(i)の要素を削除し、値を取得 ::: ``` a = [-10,1,15,20,30] a.insert(2, 5) ``` aの2番目に**5**を追加する [-10, 1, **<span style="font-size: 120%;">5</span>**, 15, 20, 30] ``` a.append(35) ``` aに**35**を追加する [-10, 1, 5, 15, 20, 30, **<span style="font-size: 120%;">35</span>**] ``` a.sort(reverse = True) ``` aを降順で並び替える [35, 30, 20, 15, 5, 1, -10] ``` a.pop(-1) ``` aの-1番目の要素を削除 [35, 30, 20, 15, 5, 1] *** ## 課題① 解答 :::spoiler 解答 <br> **A**  [35, 30, 20, 15, 5, 1] ::: *** ## 課題② ### 以下実行結果を得たい場合、【 】に入る正しいコードはどれでしょう? [実行結果] ``` [1, 4, 9, 16, 9, 4, 1] ``` [コード] ``` list = [1,2,3,4,3,2,1] aaa = 【 】 print(aaa) ``` **A**  [for i in list i ** 2] **B**  [i ** 2 for i in list] **C**  [i in i ** 2 for list] **D**  {i ** 2 for i in list} *** :::warning **<リストの内包表記>** `[ 式 for 任意の変数名 in オブジェクト ]` オブジェクトの各要素を、任意の変数名で取り出し、式で評価、 その結果を要素とする新たなリストが返す ::: :::warning **<集合>** テキストp104~107 ・重複する要素をもたない ・順序をもたない ・要素の追加は可能 ・集合演算に利用可能 ::: リストの各要素を2乗した値が実行結果となっている 構文に当てはまる選択肢は B or D Dは **{ }** で囲まれているため、結果は集合で返される *** ## 課題② 解答 :::spoiler 解答 <br> **B**  [i ** 2 for i in list] ::: *** ## 課題③ ### 以下実行結果を得たい場合、【 】に入る正しいコードはどれでしょう? [実行結果] ``` morning sandwich lunch hamburger dinner sushi ``` [コード] ``` menu = {'morning': 'sandwich', 'lunch': 'hamburger', 'dinner': 'sushi'} for k, v in menu.【 】: print(k, v) ``` **A**  values() **B**  keys() **C**  enumerate() **D**  items() *** :::warning **<辞書>** テキストp092~098 ・キー(key) : 値(value) のペアで1つの要素 ・キーをインデックスとして、値を取得できる ・要素の追加・削除は可能 ::: :::warning **<values>** **`dict.values()`** dictに含まれる全ての値の一覧を返す **<keys>** ※テキスト87p **`dict.keys()`** dictに含まれる全てのキーの一覧を返す **<items>** **`dict.items()`** dictに含まれる全てのキーと値のペアの一覧を返す **<enumerate>** **`list.enumerate()`** ・リストに含まれている要素にインデックスを0から割り振り、「(インデックス, 要素)」というタプルにまとめた特殊なオブジェクトを返す ・print関数では、特殊なオブジェクトの中の要素までを参照できず、for文で要素を1つずつ取り出すか、list関数を使用することでオブジェクトの中を参照することができる ::: 実行結果を確認すると、辞書の要素が格納されたmenuのキーと値を並べて表示している ``` for k, v in menu.【 】: print(k, v) ``` 「**k**」にキー、「**v**」に値を設定できるメソッドが解答となる *** ## 課題③ 解答  :::spoiler 解答 <br> **D**  items() ::: *** ## 課題④ 難問! ### 次の記述のうち、正しいものはどれでしょう? ※ テキスト116pの表も参照していただけると、解きやすいです。 **A**  辞書に対する帰属性判定演算子「in」「not in」による判定において、「含まれるかどうか」の判定の対象は「キー」ではなく「値」である。 **B**  リストは順序を持つ、集合、タプルは順序を持たない要素の集まりである **C**  {}は空の集合を生成する式であり、空の辞書は生成できない **D**  タプルは要素の追加が不可能、リスト、集合、辞書は要素の追加が可能 *** **A**  辞書に対する帰属性判定演算子「in」「not in」による判定において、「含まれるかどうか」の判定の対象は「キー」ではなく「値」である。 :::warning **<キーが辞書にあるかどうか調べる>** `'key' in dict`  dict に「key」というキーが含まれるか判定する ``` print('morning' in menu) ``` キーに'morning'が含まれるため、True が返る ``` print('sandwich' in menu) ``` キーに'sandwich'が含まれないため、False が返る ::: 判定の対象は「キー」のため、**A**は誤り *** **B**  リストは順序を持つ、集合、タプルは順序を持たない要素の集まりである :::warning **<タプル>** ・リストとほぼ同じ特徴 ・要素の変更・追加・削除ができない ::: タプルは、リストと同じく、順序を持つので、**B**は誤り *** **C**  {}は空の集合を生成する式であり、空の辞書は生成できない :::warning **<空の集合、空の辞書の作り方>** 集合も辞書も中かっこで表すため、空で作成する際は注意が必要 `a = set()`  空の集合が作られる `b = {} `  空の辞書が作られる ::: {}は空の集合を生成するため、**C**は誤り *** **D**  タプルは要素の追加が不可能、リスト、集合、辞書は要素の追加が可能 タプルは要素の追加が不可能で、リスト、集合、辞書は要素の追加が可能なため、**D**が正解 コメント *** ## 課題④ 解答 :::spoiler 解答 <br> **D**  タプルは要素の追加が不可能、リスト、集合、辞書は要素の追加が可能 ::: ***