###### 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** タプルは要素の追加が不可能、リスト、集合、辞書は要素の追加が可能
:::
***