この章では2つのセット間の共通した要素だけを使って、新たなセットを作るメソッドについて説明します。
この方法は3つあるので順番に説明します。
1つ目の例をみてみましょう。 aのセットとbのセットの2つのセットがありますが、2つのセット間の共通した要素だけを使って、新たなセットを作成するにはという構文で記述します。
両セット間で共通してない6,8,3,5は捨てられ、新たなセットが作成されます。
intersectionは frozensetでも使うことができます。
結果は次の通りです。
2つ目の例をみてみましょう。 aのセットとbのセットの2つのセットがあるとして、2つのセット間の共通した要素だけを使ってaのセットを書き替えるにはという構文で書きます。
両セット間で共通してない6,8,3,5は捨てられ、aのセットはに変更されます。
intersection_update メソッドは2つのセット間の共通した要素でaのセットを書き替える機能があります。
新たなセットが作成されるのではなく、元のセットが書き替えられます。
intersection_updateメソッドはfrozensetでは使うことができません。
結果は次の通りです。
3つ目の例をみてみましょう。 この例も2つのセットの共通した要素だけでセットを作ります。
作成方法は&を使用します。 a &=bのように元のセットaを変更してもいいですし、もしくはのようにcという新たなセットを作成してもいいです。
& は frozensetでも使用することができます。
結果は以下の通りです。
タグ: set
セットについて知ろう
この章ではセットについて説明します。
セットはリストと同じく、複数のデータをまとめて入れることができます。 以下がsetの基本構文です。 〇 setは新たに値を入れたり、削除したりをすることができます。
〇要素にはリスト、ディクショナリ、タプル、文字列などを入れることが出来ます。 〇 frozensetは新たに値を入れり、削除したりはできません。
では例をみてみましょう。 setの要素にはリスト形式で指定しています。
このセットは添え字を指定して取り出すことは出来ないので、for文で値を取り出しています。
出力される順番はリストのように前から取り出されるわけではありません。
結果は以下の通りです。 次の例をみてみましょう。 のようにディクショナリを要素にすることは出来ますが、printで出力すると解りますが、のようなキーだけのリストになります。 次はタプルをセットの要素にしたですが、これをprintで出力するとのようなリストになります。 次は文字列をセットの要素にしたですが、これをprintで出力するとのような1文字1文字がリストの要素になります。 全体の結果は次の通りです。
では次の例をみてみましょう。 の形式はと同じ意味になります。
セット名={要素}の形式は Pythonのバージョンが新しくなった時に新機能として付け加えられました。
printで出力するととなり、セットであることが分かります。
この形式も出力する時にはfor文を使用できます。
結果は以下の通りです。
次はfrozensetの例を見てみましょう。 frozensetの作成方法はsetと同じです。
この形式は後から値を付け加えたり、削除したりすることは出来ません。
はprintで出力するととなります。
frozensetもsetと同じでfor文で出力することが出来ます。 はprintで出力するととなります。 全体の出力結果は以下の通りです。
クラスについて知ろう
この章ではクラスについて説明します。
今までのプログラムでは変数とメソッドを扱ってきましたが、クラスと言う機能を使うことで、多くの変数とメソッドを1つの機能体として働かせてデータを処理することが出来ます。
クラスとは物を作る設計図に例えられます。設計図は車や家や鉛筆をつくる場合に必要ですが、この設計図に当たるものがクラスです。
例えば車や家や鉛筆の中には色々な部品が含まれていますが、それらの部品には「状態」や「ふるまい」があります。
鉛筆であれば「状態」は鉛筆の形、芯、線の濃さなどで、「ふるまい」は線を引く、削るなどの動作です。
その「状態」や「ふるまい」をクラスと言う設計図に書いていきます。
「状態」を変数で書き、「ふるまい」をメソッドで書くことになります。
その「状態」や「ふるまい」に指示を出すのはオブジェクトの役割です。
例えば「線を消す」など具体的な指示をオブジェクトと言う司令塔から出します。
クラスの基本構文は以下の通りです。 クラス名の初めの一文字目は大文字のアルファベットで書きます。
classとendの間に変数やメソッドなどを記述して、クラスの中身を作ります。
クラスはただの設計図なので、このクラスに指示を出す必要がありますが、それがオブジェクトです。 〇引数は省略できます。
〇このオブジェクトはインスタンスとも呼ばれています。
ではクラスの例を見てみましょう。 クラスの中に@ マークの付いている変数がありますが、これはインスタンス変数と呼ばれていまして、クラスの中で使われます。 =>オブジェクトの基本構文はと、説明しましたが、このオブジェクトを作成する過程でクラスの中のinitializeメソッドを自動的に呼び出してくれます。nyuukinメソッドやshukkinメソッドは自身で作ったメソッドですが、このinitializeメソッドはRubyであらかじめ定義されているメソッドです。
そしてこのの中の引数100000がinitializeメソッドの引数(この例ではc)に入ります。
他の言語ではコンストラクタと呼ばれる機能です。
このようにinitializeメソッドを使ってインスタンス変数に値を設定することが出来ます。
また以下の通り、初めからインスタンス変数に値を設定することもできます。
その場合にはのように引数を省略できます。 次に以下の箇所の説明をします。 =>クラス内のメソッドにデータを渡すにはという形式で書きます。
そうするとクラス内のメソッドが実行されます。
最後にshowメソッドを出力するとnyuukinメソッドやshukkinメソッドで計算された結果が入っている@zandakaが返されますので、これをprintで出力しています。
結果は「91000」です。
次の例はinitializeメソッドの引数にデフォルト値を設定する例です。 初期値を設定するときには以下のようにとデフォルト値を設定してください。
メソッドの章で説明した通り、メソッドにはあらかじめ値を設定することができます。 このようにメソッドに引数を設定した時にはオブジェクトの引数をカラにしても、そのメソッドの引数の設定値が使用されます。
先ほども説明しましたが、もう一度クラスの中のメソッドを呼び出す方法について説明します。
この例ではクラスの中で3つのメソッドを定義しています。 これらのメソッドを使用するためにはという構文で書きます(initializeメソッドだけはオブジェクトを作成過程で自動的に呼び出されるので、明示的にこの構文を使う必要はありません)。
この構文でメソッドにデータを入れていきます。この例では以下のように書いています。 引数が無い場合にはshowメソッドのように省略することができます。 これらのメソッドはオブジェクトからアクセスするのでインスタンスメソッドと言います。
今までのトップレベルのメソッドはのようにメソッド名だけでメソッドを呼び出していましたが、オブジェクトから呼び出す場合はで書くことを覚えておいてください。
次にインスタンス変数について説明します。
インスタンス変数はインスタンスメソッドからのみ参照できますので、メソッドを通してインスタンス変数の値を取得します。
ですので、この例ではすべてメソッドの中でインスタンス変数の値を足したり、引いたりしています。
では次の説明に進みます。
オブジェクトは1つだけではなく、次のように変数を変えていただくと何個でも作ることが出来ます。
例えばこの例ではbooksとbooks2の2つを作成しています。 オブジェクトをたくさん作成してもインスタンス変数はオブジェクトごとに値が設定されますので、booksの@zandakaとbooks2の@zandakaの間には関係性はありません。
結果は以下の通りです。
では次の例を見てみましょう。 では説明をしていきます。
initializeメソッドでインスタンス変数に値を設定することもできますし、setメソッド(メソッド名はsetを付けなくても構いません)を使っても値を設定することができます。
この例ではsetメソッドで設定した値でinitializeメソッドで設定した値を上書きしていますが、initializeメソッドで設定したデータよりsetメソッドで設定したデータの方が優先されます。
setメソッドだけで値を設定したい場合にはinitializeメソッドは書かなくても結構です。
ではsetメソッドについて説明します。
インスタンス変数に値をセットするためにはinitializeメソッドやsetメソッドを通常使用します。 =>「set..」というのはインスタンス変数の値を設定する時に使います。
特に「set..」で書かなくてはならないという決まりがあるわけではありませんが、解りやすいので慣習になっています。
通常はインスタンス変数ごとにsetメソッドを書きます。
次はgetメソッドについて説明します。 =>「get..」と言うのは値を呼び出し元に返す時に使います。
特に「get..」で書かなくてはならないと言う決まりがあるわけではありませんが、解りやすいので慣習になっています。
通常はインスタンス変数ごとにgetメソッドを書きます。
getメソッドは値を返すために作られるメソッドです。
結果は以下の通りです。 しかし、インスタンス変数の数だけ、このようなメソッドを書くのは面倒に思いませんか?
そこでRubyにはそれを簡潔にする機能が備わっています。
次の例で説明します。 では説明を始めます。
と、書くことで例えば本来ならばsetNameメソッドとgetNameメソッドを2つ書かなくてはいけませんでしたが、と書くだけでこれらの2つのメソッドと同じことを行わせることが出来ます。
このの中の変数に値を設定するにはという構文で入れていきます。
この例では以下のように入れています。 インスタンス変数の値を出力するにはという構文で記述します。
この例では以下の箇所です。 では次の例に進みます。 では説明を始めます。 「attr_writer :変数名」は以下のようなsetメソッドと同じ役割があります。 「attr_reader :変数名」は以下のようなgetメソッドと同じ役割があります。 使い方はと同じです。