第6章_その他コレクションの操作
今回の項目では、その他コレクションの操作ついて出題されます。
本試験の主教材である「Python3エンジニア認定基礎試験問題集」では第6章(P82~P83)の5問の内容です。
練習問題 1
次のコードを実行した結果を考えてみましょう。
from collections import deque
queue = deque(["A", "B"])
queue.append("C")
queue.popleft()
print(queue)
答えはコチラをクリック!
答え:deque([‘B’, ‘C’])
ポイント
dequeは〇〇のデータ構造
dequeはキューのデータ構造
このコードはPythonのcollectionsモジュールから提供されるdeque(double-ended queue)を使用して、キュー(Queue)の基本的な操作を行う例です。以下で各ステップを詳しく説明します。
- from collections import deque:
- ここではcollectionsモジュールからdequeクラスをインポートしています。dequeは、リストのように使えるデータ構造ですが、両端からの要素の追加や削除が効率的に行えるように設計されています。
- queue = deque([“A”, “B”]):
- これは新しいdequeオブジェクトを作成し、それをqueueという変数に格納します。初期状態として、dequeに”A”と”B”の二つの要素が含まれています。
- 初期状態のqueueは次のように表されます: deque([‘A’, ‘B’])
- queue.append(“C”):
- appendメソッドを使用して、”C”という要素をキューの右端に追加します。この操作はリストのappendと同様ですが、dequeを使用することでより効率的になります。
- このステップの後、queueは次のようになります: deque([‘A’, ‘B’, ‘C’])
- queue.popleft():
- popleftメソッドは、キューの左端から要素を1つ取り出して削除します。キューの構造においては、先に入れた要素から取り出されるべきなので、このメソッドを使用するのが適切です。
- このステップでは、最初の要素”A”が削除されます。
- その結果、queueは次のようになります: deque([‘B’, ‘C’])
- print(queue):
- queueの現在の状態を出力します。この時点では、deque([‘B’, ‘C’])が出力されます。これは、最初に”A”を削除した後に残った要素です。
このコードは、キューの典型的な操作(エンキューとデキュー)を示しています。dequeを使用することで、これらの操作が効率的に(つまり、一定時間で)行えることが特徴です。
練習問題 2
次のコードを実行した結果を考えてみましょう。
sample_tuple = ("A", "B", "C")
print(sample_tuple[0])
答えはコチラをクリック!
答え:A
ポイント
タプルは〇〇で値を参照できる。
タプルはインデックスで値を参照できる。
1. sample_tuple = (“A”, “B”, “C”)
この行では、タプルを作成しています。
- タプルとは何か?
タプルは、複数の要素を一つのオブジェクトとしてまとめることができるデータ型で、() を使って定義します。タプルは 変更不可(immutable) な点が特徴です。 - このタプルの内容
“A”, “B”, “C” という3つの文字列が要素として含まれています。この時点で sample_tuple は以下のような構造です:
sample_tuple = (“A”, “B”, “C”)
2. print(sample_tuple[0])
ここでは、タプルの インデックスを使って特定の要素にアクセス しています。
- インデックスとは?
インデックスは、データの位置を示す番号です。Pythonのインデックスは 0から始まる ため、sample_tuple[0] はタプルの 最初の要素 を指します。 - この場合のインデックスと要素
- sample_tuple[0] → 最初の要素 “A”
- sample_tuple[1] → 2番目の要素 “B”
- sample_tuple[2] → 3番目の要素 “C”
- print 関数の役割
print() は指定された値をコンソールに表示する関数です。この場合、sample_tuple[0] を表示するので、結果は以下のようになります:
A
練習問題 3
次のコードを実行した結果を考えてみましょう。
sample_tuple = ("A", "B", "C")
print(len(sample_tuple))
答えはコチラをクリック!
答え:3
ポイント
タプルは○○関数で要素数を取得できる。
タプルはlen()関数で要素数を取得できる。
1. sample_tuple = (“A”, “B”, “C”)
- この行では何が起きているか?
- タプルが作成されています。
- タプルはPythonで使われるデータ構造で、()(丸括弧)を使って複数の値をまとめます。
- この場合、”A”, “B”, “C” の3つの文字列が含まれるタプル (“A”, “B”, “C”) が作成され、変数 sample_tuple に代入されます。
- タプルの特徴:
- 変更不可(immutable): 一度作成したタプルの内容は変更できません。
- 多様なデータ型を格納可能: 異なるデータ型の値も含めることができます。
2. print(len(sample_tuple))
- len() 関数の役割
- len() 関数は、引数として渡されたシーケンス(リスト、タプル、文字列など)の要素数を返します。
- この場合、sample_tuple には3つの要素(”A”, “B”, “C”)が含まれているので、len(sample_tuple) は 3 を返します。
- print() 関数の役割
- print() 関数は、指定された値をコンソールに表示します。
- この場合、len(sample_tuple) の結果である 3 を画面に出力します。
出力結果
3
練習問題 4
次のコードを実行した結果を考えてみましょう。
s1=set([1,2,3])
s1.add(1)
s1.add(4)
print(s1)
答えはコチラをクリック!
答え:{1, 2, 3, 4}
ポイント
setは〇〇した要素は持たない。
setは重複した要素は持たない。
- s1=set([1,2,3])
- ここでは、最初にリスト[1, 2, 3]を基にしてセットs1が作成されています。このリストには3つの整数が含まれています。セットの特徴として、重複する要素は存在できませんが、ここではすべて一意の要素なので、そのままセットに変換されます。結果として、セットs1は{1, 2, 3}になります。
- s1.add(1)
- .add()メソッドを使って要素をセットに追加しようとしています。しかし、セットは重複した要素を持たないため、1は既にセットs1に存在しており、この操作は実際にはセットを変化させません。セットs1は依然として{1, 2, 3}のままです。
- s1.add(4)
- 今度は、新しい要素4をセットに追加しています。4はセットs1の中にまだ存在しないため、正常に追加されます。この操作の後、セットs1は{1, 2, 3, 4}になります。
- print(s1)
- 最後に、セットs1の現在の状態を出力しています。セットは順序のないデータ型であるため、要素がどの順番で表示されるかは保証されていませんが、通常は追加された順序を保持するような実装になっていることが多いです。このため、出力は{1, 2, 3, 4}のようになります。
このコードのポイントは、セットに重複する要素を追加しようとしても重複は排除されること、およびadd()メソッドによって新しい要素を追加できることです。
練習問題 5
次のコードを実行した結果を答えてください
s1 = set([1 , 2, 3])
s2 = set([1, 2])
print(s1-s2)
答えはコチラをクリック!
答え:{3}
ポイント
setでは ‘-‘ は○○を表す
setでは ‘-‘ は差集合を表す
- set([1, 2, 3]) と set([1, 2]) の作成:
- s1 = set([1, 2, 3]):
- この行はリスト [1, 2, 3] をセットに変換します。
- セットは重複する要素を許さず、順序に依存しないデータ構造です。
- そのため、s1 は {1, 2, 3} という集合になります。
- s2 = set([1, 2]):
- この行はリスト [1, 2] をセットに変換します。
- s2 は {1, 2} という集合になります。
- s1 = set([1, 2, 3]):
- 集合の差の計算 (s1 – s2):
- s1 – s2 は集合の差を求める演算です。
- 具体的には、s1 に含まれており、s2 には含まれていない要素を返します。
- s1 は {1, 2, 3} で、s2 は {1, 2} です。
- s1 – s2 の結果は {3} になります。
- これは、s1 の中で s2 に無い唯一の要素が 3 だからです。
- 結果の出力:
- print(s1 – s2) は実行され、コンソールに {3} が出力されます。
確認問題 1
次のコードを実行した結果として正しいものを選んでください
from collections import deque
queue = deque(["A", "B"])
queue.append("C")
queue.popleft()
queue.append("D")
queue.popleft()
queue.append("E")
queue.popleft()
print(queue)
1、deque([‘C’, ‘D’])
2、deque([‘D’])
3、deque([‘D’, ‘E’])
4、deque([‘E’])
答えはコチラをクリック!
答え:3
このコードは、collectionsモジュールのdequeを使用して、キューの基本的な操作を順番に実行していく例です。ここでは、要素の追加と削除の操作を繰り返しています。以下で各ステップを詳しく説明します。
- from collections import deque:
- collectionsモジュールからdequeをインポートしています。dequeは両端からの要素の追加と削除が効率的に行えるデータ構造です。
- queue = deque([“A”, “B”]):
- 新しいdequeオブジェクトを作成し、これに最初から”A”と”B”の要素を持たせています。この時点で、queueは次のようになっています: deque([‘A’, ‘B’]).
- queue.append(“C”):
- “C”をキューの右端に追加します。これはenqueue(エンキュー)の操作です。
- このステップの後、queueは: deque([‘A’, ‘B’, ‘C’]).
- queue.popleft():
- キューの左端から要素を1つ削除します。キューの最初の要素”A”が削除されます。これはdequeue(デキュー)の操作です。
- このステップの後、queueは: deque([‘B’, ‘C’]).
- queue.append(“D”):
- “D”を右端に追加します。
- このステップの後、queueは: deque([‘B’, ‘C’, ‘D’]).
- queue.popleft():
- 左端からもう一度要素を削除します。今回は”B”が削除されます。
- このステップの後、queueは: deque([‘C’, ‘D’]).
- queue.append(“E”):
- “E”を右端に追加します。
- このステップの後、queueは: deque([‘C’, ‘D’, ‘E’]).
- queue.popleft():
- 左端から再び要素を削除します。今回は”C”が削除されます。
- このステップの後、queueは: deque([‘D’, ‘E’]).
- print(queue):
- 最終的なqueueの状態を出力します。この時点でdeque([‘D’, ‘E’])が出力されます。
ここでの各操作はキューの典型的な使い方を示しており、実際の取り扱い方として、キューの前から取り出し、後ろに追加するという動作が行われています。このようにして、”D”と”E”が最終的にキューに残ることになります。
確認問題 2
以下のコードを実行した時、タプルが生成されないものを選択してください。
1、sample_tuple = (“A”, “B”, “C”)
2、sample_tuple = “A”, “B”, “C”
3、sample_tuple = “A”,
4、sample_tuple = tuple(“A”, “B”, “C”)
答えはコチラをクリック!
答え:4
選択肢1:
sample_tuple = (“A”, “B”, “C”)
これは典型的なタプルの生成方法です。括弧 () を用いて複数の要素を指定しており、sample_tuple はタプルになります。
結果: タプルが生成される。
選択肢2:
sample_tuple = “A”, “B”, “C”
タプルは括弧 () を省略しても、カンマ , を用いることで生成されます。この場合も (“A”, “B”, “C”) と同じくタプルが生成されます。
結果: タプルが生成される。
選択肢3:
sample_tuple = “A”,
タプルに要素が1つだけの場合、カンマ , を必ず付ける必要があります。カンマがないと単なる文字列になります。この場合、sample_tuple はタプル (“A”,) となります。
結果: タプルが生成される。
選択肢4:
sample_tuple = tuple(“A”, “B”, “C”)
tuple() はイテラブル(例: リストや文字列)を引数に取ってタプルを生成します。しかし、この場合、tuple() に複数の引数 “A”, “B”, “C” を渡しています。この形式はエラーを引き起こします。tuple() は引数として複数の要素を受け付けないため、タプルは生成されません。
結果: エラーが発生するためタプルは生成されない。
正解:
選択肢 4 はタプルが生成されません。
確認問題 3
リストとタプルの性質について正しいものを選択してください。
1、リストは異なるデータ型の要素を格納できるがタプルはできない
2、タプルは要素を追加することはできない
3、リストと同様にタプルも格納した要素を変更できる
4、リストの要素数はlen()関数で取得できるが、タプルは取得できない
答えはコチラをクリック!
答え:2
リスト: 変更可能(mutable)。要素の追加・削除・変更が可能。
タプル: 変更不可能(immutable)。要素の追加・削除・変更はできない。
両者とも異なるデータ型の要素を格納でき、len() 関数で要素数を取得できます。
確認問題 4
setの性質として正しいものを選択してください。
1、重複する要素を持つことが出来る
2、2つの和集合や差集合を演算できる
3、要素の追加についてappend()メソッドを使う
4、要素の順序は追加された順で保持される
答えはコチラをクリック!
答え:2
セット(set)はデータを管理するための特別なコレクションデータ型で、固有の特徴を持っています。それぞれの性質について説明します。
1、重複する要素を持つことが出来る
- セットは一意の要素を集めたコレクションであるため、重複する要素を持つことはできません。セットに重複する要素を追加しようとしても、既に存在する場合は無視されます。したがって、1は誤っています。
2、2つの和集合や差集合を演算できる
- セットは集合の数学的な操作を行うことができ、和集合(union)や差集合(difference)などの演算を行えます。和集合では二つのセットのすべての要素を含む新しいセットを作り、差集合では一方のセットから他方のセットの要素を除いた新しいセットを作ります。よって、2は正しいです。
3、要素の追加についてappend()メソッドを使う
- セットに要素を追加する際にはadd()メソッドを使用します。append()メソッドはリストの操作に使用されるメソッドで、セットには存在しません。したがって、3は誤っています。
4、要素の順序は追加された順で保持される
- セットは基本的に順序を持たないデータ構造です。一般的には要素の順序を保持しません。ただし、Python 3.7以降の実装では、挿入順序が保持されることがありますが、公式な仕様としては順序は未定義です。したがって、4は正確には誤りです。
結論として、セットの性質として正しいものは選択肢2だけです。
確認問題 5
次のコードを実行して{‘b’, ‘a’}が表示されるとき、空欄➀に当てはまるものとして適切なものを選択してください。
s1 = set("abcd")
s2 = set("cdef")
print(➀)
1、s1 ^ s2
2、s1 – s2
3、s1 | s2
4、s1 & s2
答えはコチラをクリック!
答え:2
コードの解説
s1 = set(“abcd”)
s2 = set(“cdef”)
print(s1 – s2)
- set(“abcd”) と set(“cdef”) の作成:
- s1 = set(“abcd”):
- この行は文字列 “abcd” をセットに変換します。
- セットは重複を許さず、要素は一意であるため、s1 は {‘a’, ‘b’, ‘c’, ‘d’} となります(セットの要素は順不同です)。
- s2 = set(“cdef”):
- この行は文字列 “cdef” をセットに変換します。
- s2 は {‘c’, ‘d’, ‘e’, ‘f’} です。
- s1 = set(“abcd”):
- 集合の差の計算 (s1 – s2):
- s1 – s2 は集合の差を求めます。
- この演算は、s1 に存在し、s2 に存在しない要素を返します。
- s1は {‘a’, ‘b’, ‘c’, ‘d’} であり、s2は {‘c’, ‘d’, ‘e’, ‘f’} です。
- s1 – s2 の結果は {‘a’, ‘b’} になります。
- この結果は、s1 の中で s2 に含まれていない要素 {‘a’, ‘b’} が抽出されたものです。
- 結果の出力:
- 最後に、print(s1 – s2) は {‘a’, ‘b’} をコンソールに出力します。
集合演算子との違い
- ^ (排他的論理和/対称差):
- s1 ^ s2 は、s1 と s2 のいずれか一方にのみ存在する要素を返します。
- 結果: {‘a’, ‘b’, ‘e’, ‘f’}
- & (論理積/積集合):
- s1 & s2 は、s1 にも s2 にも共通して存在する要素を返します。
- 結果: {‘c’, ‘d’}
- | (論理和/和集合):
- s1 | s2 は、s1 と s2 のどちらかに存在するすべての要素を返します。
- 結果: {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’}
次回は…
次回は「013_Pythonエンジニア認定基礎試験6-6~10」です。
コレクションの操作方法について学びましょう!
参考資料一覧: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/