013_Pythonエンジニア認定基礎試験6-6~10

目次

第6章_その他コレクションの操作

今回の項目では、その他コレクションの操作ついて出題されます。
本試験の主教材である「Python3エンジニア認定基礎試験問題集」では第6章(P84~P87)の5問の内容です。

練習問題 1

次のコードを実行した結果を考えてみましょう。

s1 = {1, 2, 3}
print(4 in s1)
答えはコチラをクリック!

答え:False

ポイント
○○演算子はset内の値が含まれる判定する

in演算子はset内の値が含まれる判定する

  1. 集合 s1 の宣言:
    • s1 = {1, 2, 3}:
      • ここで s1 は集合(セット)として定義されています。
      • 集合は、重複のない要素を持つデータ構造で、要素の順序は特定されません。
      • s1 には整数 1, 2, 3 が含まれています。
  2. 要素の存在確認 (4 in s1):
    • 4 in s1:
      • この行は、要素 4 が集合 s1 に含まれているかどうかを判定するための式です。
      • in 演算子は、指定された要素が集合内に存在するかを確認し、存在すれば True、存在しなければ False を返します。
      • s1 は {1, 2, 3} であり、4 はこの集合に含まれていません。
  3. 結果の出力:
    • print(4 in s1):
      • 4 in s1 の評価結果(False)を出力します。
      • したがって、False がコンソールに表示されます。

練習問題 2

次のコードを実行した結果を考えてみましょう。

student_ages = {
    "Alice": 18,
    "Bob": 15,
    "Charlie": 16
}
print(student_ages["Alice"])
答えはコチラをクリック!

答え:18

ポイント
タプルは〇〇で値を参照できる。

タプルはインデックスで値を参照できる。

  • ディクショナリーの宣言:
    • student_ages = {…}:
      • ここで、student_ages はディクショナリーというデータ型で、キーと値のペアのコレクションを格納します。
      • 各ペアは同じ形式で表示されています: キー: 値
      • ディクショナリーは中括弧 {} を使用して定義され、キーと値はコロン : で分けられています。
  • キーと値のペア:
    • “Alice”: 18:
      • ここでは、キーは “Alice” であり、このキーに関連付けられた値は 18 です。
      • キーは文字列で、値は整数を使用しています。
    • 他のエントリも同様に定義されています:
      • “Bob”: 15
      • “Charlie”: 16
    • ディクショナリー全体は次のようになります:

{

  “Alice”: 18,

  “Bob”: 15,

  “Charlie”: 16

}

  • ディクショナリーの要素にアクセス:
    • student_ages[“Alice”]:
      • この部分はディクショナリーの student_ages 内でキー “Alice” に関連する値を取り出すためのものです。
      • ディクショナリーでは、キーをインデックスとして使用して対応する値を取得します。
      • ここでは、キー “Alice” に対応する値 18 が取り出されます。
  • 結果の出力:
    • print(student_ages[“Alice”]):
      • 先ほど取り出した値 18 を表示します。
      • print() 関数によって、この値がコンソールに出力されます。

練習問題 3

次のコードを実行した結果を考えてみましょう。

age = {
    "Akira": 12,
    "Hikaru": 20
}
del age["Akira"]
print(age)
答えはコチラをクリック!

答え:  {‘Hikaru’: 20}

ポイント
辞書形式は○○で削除できる。

辞書形式はdelで削除できる。

age = {

    “Akira”: 12,

    “Hikaru”: 20

}

  • ディクショナリの作成:
    • ここでageという名前のディクショナリが初期化されています。
    • このディクショナリには2つのキーと値のペアがあります:
      • キー “Akira” に対する値は 12 で、これは “Akira” という名前の人の年齢を表しています。
      • キー “Hikaru” に対する値は 20 で、これは “Hikaru” の年齢を示します。
    • 全体的なディクショナリの状態は {“Akira”: 12, “Hikaru”: 20} です。

del age[“Akira”]

  • キーと値の削除:
    • del ステートメントを用いて、age ディクショナリからキー “Akira” とその対応する値 12 を削除しています。
    • これにより、そのキーと値のペアはディクショナリから完全に取り除かれます。
    • 削除後、ディクショナリには “Hikaru” のペアだけが残ります。
    • 現在の状態は {“Hikaru”: 20} となります。

print(age)

  • ディクショナリの出力:
    • 最終的なディクショナリ age をコンソールに表示します。
    • 出力結果は、削除後のディクショナリ内容である {“Hikaru”: 20} です。

練習問題 4

次のコードを実行した結果を考えてみましょう。

age = {"Hikaru" : 12, "Akira": 15}
print("Hikaru" in age)
答えはコチラをクリック!

答え:True

ポイント
○○演算子は辞書にキーが含まれる判定する。

in演算子は辞書にキーが含まれる判定する。

  • 辞書の定義:

age = {“Hikaru”: 12, “Akira”: 150}

  • ここでは age という名前の変数に辞書が割り当てられています。
  • 辞書はキー(key)と値(value)のペアで構成されていて、”Hikaru”というキーに対して値 12、”Akira”に対して 150が関連付けられています。つまり、Hikaru の年齢は 12 歳、Akira の年齢は 15 歳です。
  • メンバーシップ演算子:
  • print(“Hikaru” in age)
    • in 演算子を使用して、指定したキー(ここでは “Hikaru”)が辞書 age に存在するかどうかをチェックしています。
    • age 辞書には “Hikaru” というキーがあるため、”Hikaru” in age は True になります。
  • 出力:
    • print 関数によって、上記のチェックの結果(True または False)がコンソールに表示されます。この場合は True が表示されます。

練習問題 5

次のコードを実行した結果を答えてください

print({x: x**2 for x in (1,3)})
答えはコチラをクリック!

答え:{1: 1, 3: 9}

ポイント
辞書形式の〇〇は{キーの式: 値の式 for 変数 in 反復可能体}

辞書形式の〇〇は{キーの式: 値の式 for 変数 in 反復可能体}

  • 辞書内包表記:

{x: x**2 for x in (1,3)}

  • {} で囲まれた部分が辞書内包表記です。
  • x: x**2 は辞書のキーと値のペアを表します。ここでは x をキーとして、その値として x の二乗(x**2)を指定しています。
  • イテレーション:
    • for x in (1,3) は、タプル (1, 3) の要素を一つずつ x に代入していくループです。この文では、x はまず 1 に、次に 3 になります。
  • 辞書の構築:
    • 各イテレーションの度に、x をキーとして、その平方を値として持つ辞書のエントリーが作成されます。
    • 最初のループで x = 1 の時、キー 1 に対して値は 1**2 すなわち 1 になります。
    • 次のループで x = 3 の時、キー 3 に対して値は 3**2 すなわち 9 になります。
  • 最終的な辞書:
    • したがって、最終的に生成される辞書は {1: 1, 3: 9} になります。
  • 出力:
  • print({x: x**2 for x in (1, 3)})
    • print 関数を使って、この辞書をコンソールに表示しています。結果として {1: 1, 3: 9} が出力されます。

確認問題 1

次のコードを実行した際 “True” と表示されるとき➀に当てはまるものとして正しいものを選択してください。

s1 = {1, 2, 3, 4}
s2 = {1, 3, 5, 7}
s = s2 - s1
print(2 in s)

1、s1 – s2
2、s2 – s1
3、s1 & s2
4、s2 & s1

答えはコチラをクリック!

答え:1

集合 s1 と s2 の作成:

s1 = {1, 2, 3, 4}:

s1 は要素が 1, 2, 3, 4 の整数集合です。

集合(セット)は順序に関係なく要素を格納し、同じ要素を重複して持たない性質があります。

s2 = {1, 3, 5, 7}:

s2 は要素が 1, 3, 5, 7 の整数集合です。

集合の差の計算 (s1 – s2):

s = s1 – s2:

この演算は、集合 s1 の要素から集合 s2 の要素を引いた結果を求めるものです。

具体的には、s1 に含まれていて、同じ要素が s2 に含まれていない場合、その要素は結果の集合 s に残ります。

s1 は {1, 2, 3, 4} で、s2 は {1, 3, 5, 7} です。

両方に含まれている要素は 1 と 3 です。これを s1 から除くと、残る要素は {2, 4} になります。

したがって、s は {2, 4} です。

要素の存在確認 (2 in s):

print(2 in s):

この行は、要素 2 が集合 s に含まれているかどうかを評価します。

s は {2, 4} なので、2 は確かにこの集合に含まれています。

2 in s は True を返します。

出力:

print(2 in s) は True となり、それがコンソールに出力されます。

確認問題 2

以下のコードのうち、ディクショナリの定義として誤ったものを選択してください。

1、
student_ages = {
“Alice”: 18,
“Bob”: 15,
“Charlie”: 16
}


2、
student_ages = {
(“Alice”,”Bob”,”Charlie”): (18, 15, 16),
}


3、
student_ages = {
18:”Alice”,
15: “Bob”,
16: “Charlie”
}


4、
student_ages = {
[“Alice”,”Bob”,”Charlie”]: [18, 15, 16],
}

答えはコチラをクリック!

答え:4

選択肢1

student_ages = {

    “Alice”: 18,

    “Bob”: 15,

    “Charlie”: 16

}

  • 解説:
    • これは典型的で正しいディクショナリの定義です。文字列をキーとして整数を値に持っており、各ペアはコロン : で繋がれ、ペア同士はコンマ , で区切られています。
    • 正しいディクショナリの定義です。

選択肢2

student_ages = {

    (“Alice”, “Bob”, “Charlie”): (18, 15, 16)

}

  • 解説:
    • このディクショナリは1つのキーとしてタプル (“Alice”, “Bob”, “Charlie”) を使用し、それに対して別のタプル (18, 15, 16) を値として持っています。
    • タプルはミュータブル(変更不可能)なデータ型なので、ディクショナリのキーとして適しています。ディクショナリ全体の構造も正しいです。
    • 正しいディクショナリの定義です。

選択肢3

student_ages = {

    18: “Alice”,

    15: “Bob”,

    16: “Charlie”

}

  • 解説:
    • 整数をキーにして文字列を値に持っています。この構造自体はディクショナリとしては正しく、キーと値のペアが正しく形成されています。
    • 正しいディクショナリの定義です。

選択肢4

student_ages = {

    [“Alice”, “Bob”, “Charlie”]: [18, 15, 16]

}

誤ったディクショナリの定義です。

解説:

このディクショナリはキーとしてリスト [“Alice”, “Bob”, “Charlie”] を使用しています。

ディクショナリのキーは不変(イミュータブル)でなければならないので、リストのように要素の変更が可能な(ミュータブルな)データ型はキーとして使用できません。このためにコーディングエラーが発生します。

確認問題 3

次のコードを実行した結果として正しいものを選択してください。

age = {"Akira": 12}
age["Hikaru"] = 20
age["Akari"] = 18
del age["Akira"]
age["Koji"] = 10
age["Hikaru"] = 18
print(age)


1、{‘Hikaru’: 18, ‘Takumi’: 18, ‘Koji’: 10}
2、{‘Koji’: 10, ‘Takumi’: 18, ‘Hikaru’: 20}
3、{‘Koji’: 10, ‘Hikaru’: 20, ‘Takumi’: 18}
4、{‘Akira’: 12, ‘Koji’: 10, ‘Takumi’: 18, ‘Hikaru’: 20}

答えはコチラをクリック!

答え:1

age = {“Akira”: 12}

  • ディクショナリ age が宣言され、初期化されています。
  • キーは “Akira”、対応する値は 12 です。
  • これは、”Akira” という人の年齢を意味します。

age[“Hikaru”] = 20

  • ディクショナリに新しいキーとその値を追加しています。
  • キー “Hikaru” に対し、値 20 を割り当てます。
  • 結果として、ディクショナリ age は次のようになります: {“Akira”: 12, “Hikaru”: 20}。

age[“Akari”] = 18

  • “Akari” という新しいキーに 18 という値を追加します。
  • 今のディクショナリの状態: {“Akira”: 12, “Hikaru”: 20, “Akari”: 18}。

del age[“Akira”]

  • del ステートメントを使ってディクショナリから “Akira” というキーとその値を削除しています。
  • “Akira” とその年齢 12 が消去され、ディクショナリは次の状態になります: {“Hikaru”: 20, “Akari”: 18}。

age[“Koji”] = 10

  • “Koji” という新しいキーに 10 という値を割り当てます。
  • ディクショナリの状態はこれで {“Hikaru”: 20, “Akari”: 18, “Koji”: 10} になります。

age[“Hikaru”] = 18

  • 既存のキー “Hikaru” の値を 20 から 18 に更新します。
  • Pythonのディクショナリでは、既存のキーに新しい値を簡単に割り当てて更新できます。
  • ディクショナリの現在の内容は {“Hikaru”: 18, “Akari”: 18, “Koji”: 10} です。

print(age)

  • 最終的なディクショナリの内容をコンソールに出力します。
  • 出力されるディクショナリは {“Hikaru”: 18, “Akari”: 18, “Koji”: 10} です。

確認問題 4

ディクショナリageにキーHikaruが含まれていることを判定するとき、空欄➀の内容として誤っているものを選択してください。

age = {
    "Akira": 12,
    "Hikaru": 20
}
print(➀)


1、”Akira” in age

2、”Akira” in age.keys()

3、age.includes(“Akira”)

4、”Akira” in list(age)

答えはコチラをクリック!

答え:2

セット(set)はデータを管理するための特別なコレクションデータ型で、固有の特徴を持っています。それぞれの性質について説明します。

1、重複する要素を持つことが出来る

  • セットは一意の要素を集めたコレクションであるため、重複する要素を持つことはできません。セットに重複する要素を追加しようとしても、既に存在する場合は無視されます。したがって、1は誤っています。

2、2つの和集合や差集合を演算できる

  • セットは集合の数学的な操作を行うことができ、和集合(union)や差集合(difference)などの演算を行えます。和集合では二つのセットのすべての要素を含む新しいセットを作り、差集合では一方のセットから他方のセットの要素を除いた新しいセットを作ります。よって、2は正しいです。

3、要素の追加についてappend()メソッドを使う

  • セットに要素を追加する際にはadd()メソッドを使用します。append()メソッドはリストの操作に使用されるメソッドで、セットには存在しません。したがって、3は誤っています。

4、要素の順序は追加された順で保持される

  • セットは基本的に順序を持たないデータ構造です。一般的には要素の順序を保持しません。ただし、Python 3.7以降の実装では、挿入順序が保持されることがありますが、公式な仕様としては順序は未定義です。したがって、4は正確には誤りです。

結論として、セットの性質として正しいものは選択肢2だけです。

確認問題 5

実行すると{1: 1, 2: 4, 3: 9}と表示されるコードとしえ正しいものを選択してください。

1、print(x: {for x**2 in (1, 2, 3)})

2、print({x: x**2 for x in (1, 2, 3)})

3、print({x: for x**2 in (1, 2, 3)})

4、print({for x: x**2 in (1,2,3)})

答えはコチラをクリック!

答え:2

  • 選択肢 1:

print(x: {for x**2 in (1, 2, 3)})

  • これは文法的に誤りです。x: の使い方が不適切であり、また {for x**2 in …} という形式自体が辞書内包表記として正しくありません。無効なコードです。
  • 選択肢 2:

print({x: x**2 for x in (1, 2, 3)})

  • これは正しい辞書内包表記で、次のように機能します。
    • for x in (1, 2, 3) というループで、x が 1, 2, 3 と順に代入されます。
    • 各 x に対して、x: x**2 という形で x をキー、xの二乗を値とするエントリーが生成されます。
    • 結果として {1: 1, 2: 4, 3: 9} が得られます。この選択肢が正解です。
  • 選択肢 3:

print({x: for x**2 in (1, 2, 3)})

  • この構文も文法的に不正です。for を含む使い方が間違っています。無効なコードです。
  • 選択肢 4:
  • print({for x: x**2 in (1, 2, 3)})
    • この選択肢も文法的に正しくありません。辞書内包表記の形式になっていません。無効なコードです。

次回は…

次回は「013_Pythonエンジニア認定基礎試験7-1~4」です。
コレクションの操作方法について学びましょう!

参考資料一覧:Python3エンジニア認定[基礎試験]問題集
https://www.pythonic-exam.com
https://data-engineer-japan.com
https://mynavi-agent.jp
https://python-basic.com
https://www.tokai-bs.co.jp
https://freelance.techcareer.jp/articles/wp/skills/python/detail/550/
https://pythonzen-pep8-exam.jp/

目次