Try   HackMD
tags: Python勉強会

Python勉強会 第3回 解説

<第3回Web会議日程>
2024年01月17日(水) 19:00から

<第3回の自習範囲>
【Pythonチュートリアル】
 https://docs.python.org/ja/3/tutorial/index.html

  1. データ構造
    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 , ] ・異なるデータ型の要素を格納可能
・長さ(要素数)が可変
・要素の書き換え可
・インデックス(番号)で要素にアクセス
タプル ( 値1 , 値2 , ) ・異なるデータ型の要素を格納可能
・要素の書き換え不可
・インデックス(番号)で要素にアクセス
辞書 { キー1 : 値1 , キー2 : 値2 , } ・異なるデータ型の要素を格納可能
・長さ(要素数)が可変
・要素の書き換え可
キーで要素にアクセス
集合型
(セット)
{ 値1 , 値2 , } ・異なるデータ型の要素を格納可能
・長さ(要素数)が可変
重複する要素があっても無視される(一意な値をもつ要素が残る)
要素の順序は保持しない

※テキスト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]

<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, 5, 15, 20, 30]

a.append(35)

aに35を追加する

[-10, 1, 5, 15, 20, 30, 35]

a.sort(reverse = True)

aを降順で並び替える

[35, 30, 20, 15, 5, 1, -10]

a.pop(-1)

aの-1番目の要素を削除

[35, 30, 20, 15, 5, 1]


課題① 解答

解答

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}


<リストの内包表記>

[ 式 for 任意の変数名 in オブジェクト ]

オブジェクトの各要素を、任意の変数名で取り出し、式で評価、
その結果を要素とする新たなリストが返す

<集合> テキストp104~107

・重複する要素をもたない
・順序をもたない
・要素の追加は可能
・集合演算に利用可能

リストの各要素を2乗した値が実行結果となっている

構文に当てはまる選択肢は B or D

Dは { } で囲まれているため、結果は集合で返される


課題② 解答

解答

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()


<辞書> テキストp092~098
・キー(key) : 値(value) のペアで1つの要素
・キーをインデックスとして、値を取得できる
・要素の追加・削除は可能

<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」に値を設定できるメソッドが解答となる


課題③ 解答

解答

D  items()


課題④ 難問!

次の記述のうち、正しいものはどれでしょう?

※ テキスト116pの表も参照していただけると、解きやすいです。

A  辞書に対する帰属性判定演算子「in」「not in」による判定において、「含まれるかどうか」の判定の対象は「キー」ではなく「値」である。
B  リストは順序を持つ、集合、タプルは順序を持たない要素の集まりである
C  {}は空の集合を生成する式であり、空の辞書は生成できない
D  タプルは要素の追加が不可能、リスト、集合、辞書は要素の追加が可能


A  辞書に対する帰属性判定演算子「in」「not in」による判定において、「含まれるかどうか」の判定の対象は「キー」ではなく「値」である。

<キーが辞書にあるかどうか調べる>
'key' in dict
 dict に「key」というキーが含まれるか判定する

print('morning' in menu)

キーに'morning'が含まれるため、True が返る

print('sandwich' in menu)

キーに'sandwich'が含まれないため、False が返る

判定の対象は「キー」のため、は誤り


B  リストは順序を持つ、集合、タプルは順序を持たない要素の集まりである

<タプル>
・リストとほぼ同じ特徴
・要素の変更・追加・削除ができない

タプルは、リストと同じく、順序を持つので、Bは誤り


C  {}は空の集合を生成する式であり、空の辞書は生成できない

<空の集合、空の辞書の作り方>
集合も辞書も中かっこで表すため、空で作成する際は注意が必要
a = set()
 空の集合が作られる
b = {}
 空の辞書が作られる

{}は空の集合を生成するため、Cは誤り


D  タプルは要素の追加が不可能、リスト、集合、辞書は要素の追加が可能

タプルは要素の追加が不可能で、リスト、集合、辞書は要素の追加が可能なため、Dが正解 コメント


課題④ 解答

解答

D  タプルは要素の追加が不可能、リスト、集合、辞書は要素の追加が可能