はじめに
この実験では、Python で変数が集合 (set) かどうかを識別する方法を学びます。まず、集合の基本的な特性、つまり要素の順序がないことと要素の一意性を理解します。実践的な演習を通じて、波括弧と set() コンストラクタの両方を使って集合を作成し、要素の追加や削除、メンバーシップのチェックなどの一般的な集合操作を探索します。
次に、この実験では type() 関数と isinstance() 関数を使って変数が本当に集合かどうかを判断する方法を案内します。この実験の終わりまでに、Python コード内の集合を自信を持って識別するための知識とスキルを身につけることができるでしょう。
集合 (set) を理解する
このステップでは、Python の集合 (set) について学びます。集合は、一意の要素からなる順序付けされていないコレクションです。つまり、集合には重複した値を含めることができず、要素の順序も保証されません。集合は、和集合、積集合、差集合などの数学的な集合演算を行うのに便利です。
まずは集合を作成してみましょう。波括弧 {} または set() コンストラクタを使って集合を作成することができます。
LabEx 環境で VS Code エディタを開きます。
~/projectディレクトリにsets_example.pyという名前の新しいファイルを作成します。## Create a set using curly braces my_set = {1, 2, 3, 4, 5} print(my_set) ## Create a set using the set() constructor another_set = set([3, 4, 5, 6, 7]) print(another_set)ターミナルで
pythonコマンドを使ってスクリプトを実行します。python ~/project/sets_example.py以下のような出力が表示されるはずです。
{1, 2, 3, 4, 5} {3, 4, 5, 6, 7}
では、いくつかの一般的な集合操作を探索してみましょう。
sets_example.pyファイルに以下のコードを追加します。## Add an element to a set my_set.add(6) print(my_set) ## Remove an element from a set my_set.remove(1) print(my_set) ## Check if an element is in a set print(3 in my_set) print(1 in my_set)再度スクリプトを実行します。
python ~/project/sets_example.py以下のような出力が表示されるはずです。
{1, 2, 3, 4, 5, 6} {2, 3, 4, 5, 6} True False
集合は、リストから重複する要素を削除するのに特に便利です。
sets_example.pyファイルに以下のコードを追加します。## Create a list with duplicate elements my_list = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] print(my_list) ## Convert the list to a set to remove duplicates unique_elements = set(my_list) print(unique_elements)スクリプトを実行します。
python ~/project/sets_example.py出力は以下のようになるはずです。
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4] {1, 2, 3, 4}
ご覧の通り、集合 unique_elements には元のリストの一意の要素のみが含まれています。
type() を使って識別する
このステップでは、Python の type() 関数を使って変数のデータ型を識別する方法を学びます。データ型を理解することは、正しく効率的なコードを書くために重要です。
type() 関数は、オブジェクトの型を返します。異なるデータ型でどのように動作するか見てみましょう。
LabEx 環境で VS Code エディタを開きます。
~/projectディレクトリにtype_example.pyという名前の新しいファイルを作成します。## Check the type of an integer x = 10 print(type(x)) ## Check the type of a float y = 3.14 print(type(y)) ## Check the type of a string z = "Hello" print(type(z)) ## Check the type of a boolean a = True print(type(a)) ## Check the type of a list b = [1, 2, 3] print(type(b)) ## Check the type of a tuple c = (1, 2, 3) print(type(c)) ## Check the type of a set d = {1, 2, 3} print(type(d)) ## Check the type of a dictionary e = {"name": "Alice", "age": 30} print(type(e))ターミナルで
pythonコマンドを使ってスクリプトを実行します。python ~/project/type_example.py以下のような出力が表示されるはずです。
<class 'int'> <class 'float'> <class 'str'> <class 'bool'> <class 'list'> <class 'tuple'> <class 'set'> <class 'dict'>
出力は各変数のデータ型を示しています。たとえば、<class 'int'> は変数が整数であることを示し、<class 'str'> は変数が文字列であることを示します。
変数のデータ型を理解することは重要です。なぜなら、それによってその変数に対して実行できる操作が決まるからです。たとえば、整数と浮動小数点数には算術演算を行うことができますが、文字列には行うことができません。
操作を実行する前に、type() 関数を使って変数が特定の型であるかどうかをチェックする例を見てみましょう。
type_example.pyファイルに以下のコードを追加します。## Check if a variable is an integer before adding 5 to it num = 10 if type(num) == int: result = num + 5 print(result) else: print("Variable is not an integer") ## Check if a variable is a string before concatenating it with another string text = "Hello" if type(text) == str: greeting = text + ", World!" print(greeting) else: print("Variable is not a string")再度スクリプトを実行します。
python ~/project/type_example.py以下のような出力が表示されるはずです。
15 Hello, World!
この例では、type() 関数を使って、それぞれ加算と連結操作を実行する前に、変数 num が整数であることと変数 text が文字列であることをチェックしています。
isinstance() で確認する
このステップでは、Python の isinstance() 関数を使って、オブジェクトが特定のクラスまたは型のインスタンスであるかどうかを確認する方法を学びます。これは、type() を使うよりも堅牢で推奨されるデータ型のチェック方法です。
isinstance() 関数は 2 つの引数を取ります。チェックするオブジェクトと、比較するクラスまたは型です。オブジェクトが指定されたクラスまたは型のインスタンスであれば True を返し、そうでなければ False を返します。
LabEx 環境で VS Code エディタを開きます。
~/projectディレクトリにisinstance_example.pyという名前の新しいファイルを作成します。## Check if a variable is an integer x = 10 print(isinstance(x, int)) ## Check if a variable is a float y = 3.14 print(isinstance(y, float)) ## Check if a variable is a string z = "Hello" print(isinstance(z, str)) ## Check if a variable is a boolean a = True print(isinstance(a, bool)) ## Check if a variable is a list b = [1, 2, 3] print(isinstance(b, list)) ## Check if a variable is a tuple c = (1, 2, 3) print(isinstance(c, tuple)) ## Check if a variable is a set d = {1, 2, 3} print(isinstance(d, set)) ## Check if a variable is a dictionary e = {"name": "Alice", "age": 30} print(isinstance(e, dict))ターミナルで
pythonコマンドを使ってスクリプトを実行します。python ~/project/isinstance_example.py以下のような出力が表示されるはずです。
True True True True True True True True
すべての変数は、チェックした型のインスタンスであるため、isinstance() はそれぞれのケースで True を返しました。
isinstance() は、継承 (inheritance) を扱う際に特に便利です。あるクラスが別のクラスを継承している場合、サブクラスのオブジェクトは親クラスのインスタンスとも見なされます。
isinstance_example.pyファイルに以下のコードを追加します。class Animal: pass class Dog(Animal): pass my_dog = Dog() ## Check if my_dog is an instance of Dog print(isinstance(my_dog, Dog)) ## Check if my_dog is an instance of Animal print(isinstance(my_dog, Animal))再度スクリプトを実行します。
python ~/project/isinstance_example.py以下のような出力が表示されるはずです。
True True
この例では、Dog は Animal を継承しています。したがって、my_dog は Dog と Animal の両方のインスタンスです。
isinstance() は、継承を正しく扱い、より柔軟性があるため、一般的に type() よりも推奨されます。
まとめ
この実験では、Python の集合 (set) について学びました。集合は、一意の要素からなる順序付けされていないコレクションです。波括弧 {} と set() コンストラクタを使って集合を作成し、要素の追加や削除などの一般的な集合操作を行いました。
さらに、リストを集合に変換することで、リストから重複する要素を削除する方法を調べました。また、in 演算子を使って集合内の要素の存在を確認する方法も学びました。



