はじめに
この実験では、Python の様々な組み込みオブジェクトを操作する方法を学びます。Python は、数値、文字列、リスト、辞書などの様々な組み込みデータ型を提供しています。これらのオブジェクトを習得することは、すべての Python プログラマにとって重要です。
さらに、実践的な演習を通じて、Python の基本的な操作を練習し、Python の数値、文字列、リスト、辞書を効果的に扱う方法を学びます。
Python の数値を扱う
Python は数値演算に対して強力なサポートを提供しています。プログラミングにおいて、数値は計算や量の表現に使用される基本的なデータ型です。このステップでは、Python での基本的な数値操作を紹介します。これは、プログラムで様々な数学的演算を行うために不可欠です。
基本的な算術演算
Python の数値を扱い始めるには、まず Python の対話型シェルを開く必要があります。ターミナルで python3 と入力することで、これを行うことができます。Python の対話型シェルを使用すると、Python コードを一行ずつ記述して実行できるため、テストや学習に最適です。
python3
Python の対話型シェルに入ったら、いくつかの基本的な算術演算を試すことができます。Python は算術に関して標準的な数学の規則、たとえば演算子の優先順位(PEMDAS: 括弧、指数、乗算と除算、加算と減算)に従います。
>>> 3 + 4*5 ## 乗算は加算よりも優先順位が高いため、まず 4*5 が計算され、その結果に 3 が加算されます
23
>>> 23.45 / 1e-02 ## ここでは 0.01 の科学表記が使用されています。除算を行って結果を得ます
2345.0
整数除算
Python 3 では、除算の扱いが Python 2 と異なります。これらの違いを理解することは、コードで予期しない結果を避けるために重要です。
>>> 7 / 4 ## Python 3 では、通常の除算は結果が整数であっても浮動小数点数を返します
1.75
>>> 7 // 4 ## 切り捨て除算(小数部分を切り捨てる)は商を整数として返します
1
数値メソッド
Python の数値には、しばしば見過ごされるいくつかの便利なメソッドがあります。これらのメソッドは、複雑な数値演算や変換を簡素化することができます。いくつかを見てみましょう。
>>> x = 1172.5
>>> x.as_integer_ratio() ## このメソッドは浮動小数点数を分数として表現します。これはいくつかの数学的計算に役立つ場合があります
(2345, 2)
>>> x.is_integer() ## 浮動小数点数が整数値かどうかを確認します。この場合、1172.5 は整数ではないため、False が返されます
False
>>> y = 12345
>>> y.numerator ## 整数の場合、分子はその数自体です
12345
>>> y.denominator ## 整数の場合、分母は常に 1 です
1
>>> y.bit_length() ## このメソッドは、数値を 2 進数で表すために必要なビット数を教えてくれます。これはビット演算で役立つ場合があります
14
これらのメソッドは、特定の数値演算や変換を行う必要がある場合に特に便利です。これらを使用すると、時間を節約でき、コードをより効率的にすることができます。
Python の対話型シェルの探索が終わったら、次のように入力してシェルを終了できます。
>>> exit()
Python の文字列を扱う
文字列は Python で最も一般的に使用されるデータ型の 1 つです。文字列はテキストを表すために使用され、文字、数字、記号を含むことができます。このステップでは、様々な文字列操作を探索します。これらは Python でテキストデータを扱うために不可欠なスキルです。
文字列の作成と定義
Python で文字列を扱い始めるには、まず Python の対話型シェルを開く必要があります。このシェルを使用すると、Python コードを一行ずつ記述して実行できるため、学習やテストに最適です。次のコマンドを使用して、再度 Python の対話型シェルを開きましょう。
python3
シェルが開いたら、文字列を定義することができます。この例では、株式のティッカーシンボルを含む文字列を作成します。Python では、テキストをシングルクォート (') またはダブルクォート (") で囲むことで、文字列を定義することができます。以下は、文字列の定義方法です。
>>> symbols = 'AAPL IBM MSFT YHOO SCO'
>>> symbols
'AAPL IBM MSFT YHOO SCO'
これで、symbols という名前の文字列変数を作成し、値を割り当てました。変数名を入力して Enter キーを押すと、Python は文字列の値を表示します。
文字と部分文字列のアクセス
Python では、文字列にインデックスを付けて個々の文字にアクセスすることができます。インデックスは 0 から始まります。つまり、文字列の最初の文字のインデックスは 0、2 番目の文字のインデックスは 1 というようになります。負のインデックスもサポートされており、-1 は最後の文字、-2 は最後から 2 番目の文字を指します。
symbols 文字列の個々の文字にアクセスする方法を見てみましょう。
>>> symbols[0] ## 最初の文字
'A'
>>> symbols[1] ## 2 番目の文字
'A'
>>> symbols[2] ## 3 番目の文字
'P'
>>> symbols[-1] ## 最後の文字
'O'
>>> symbols[-2] ## 最後から 2 番目の文字
'C'
スライシングを使用して部分文字列を抽出することもできます。スライシングを使用すると、開始インデックスと終了インデックスを指定して文字列の一部を取得することができます。スライシングの構文は string[start:end] で、部分文字列には開始インデックスから終了インデックスの直前までの文字が含まれます。
>>> symbols[:4] ## 最初の 4 文字
'AAPL'
>>> symbols[-3:] ## 最後の 3 文字
'SCO'
>>> symbols[5:8] ## インデックス 5 から 7 までの文字
'IBM'
文字列の不変性
Python の文字列は不変(immutable)です。つまり、文字列が作成された後は、個々の文字を変更することはできません。文字列の文字を変更しようとすると、Python はエラーを発生させます。
symbols 文字列の最初の文字を変更してみましょう。
>>> symbols[0] = 'a' ## これはエラーを引き起こします
次のようなエラーが表示されるはずです。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
このエラーは、文字列が不変であるため、文字列の個々の文字に新しい値を割り当てることができないことを示しています。
文字列の連結
文字列は直接変更することはできませんが、連結(concatenation)によって新しい文字列を作成することができます。連結とは、2 つ以上の文字列を結合することを意味します。Python では、+ 演算子を使用して文字列を連結することができます。
>>> symbols += ' GOOG' ## 新しいシンボルを追加
>>> symbols
'AAPL IBM MSFT YHOO SCO GOOG'
>>> symbols = 'HPQ ' + symbols ## 新しいシンボルを先頭に追加
>>> symbols
'HPQ AAPL IBM MSFT YHOO SCO GOOG'
これらの操作は、元の文字列を変更するのではなく、新しい文字列を作成することに注意してください。元の文字列は変更されず、結合された値を持つ新しい文字列が作成されます。
部分文字列の検索
部分文字列が文字列内に存在するかどうかを確認するには、in 演算子を使用することができます。in 演算子は、部分文字列が文字列内に見つかった場合は True を返し、そうでない場合は False を返します。
>>> 'IBM' in symbols
True
>>> 'AA' in symbols
True
>>> 'CAT' in symbols
False
'AA' が True を返すのは、"AAPL" の中に見つかるためです。これは、大きな文字列内で特定のテキストを検索する便利な方法です。
文字列メソッド
Python の文字列には、文字列に対して様々な操作を行うための多数の組み込みメソッドが用意されています。これらのメソッドは、文字列オブジェクトに関連付けられた関数であり、ドット表記 (string.method()) を使用して呼び出すことができます。
>>> symbols.lower() ## 小文字に変換
'hpq aapl ibm msft yhoo sco goog'
>>> symbols ## 元の文字列は変更されない
'HPQ AAPL IBM MSFT YHOO SCO GOOG'
>>> lowersyms = symbols.lower() ## 結果を新しい変数に保存
>>> lowersyms
'hpq aapl ibm msft yhoo sco goog'
>>> symbols.find('MSFT') ## 部分文字列の開始インデックスを検索
13
>>> symbols[13:17] ## その位置の部分文字列を確認
'MSFT'
>>> symbols = symbols.replace('SCO','') ## 部分文字列を置換
>>> symbols
'HPQ AAPL IBM MSFT YHOO GOOG'
実験が終了したら、次のコマンドを使用して Python シェルを終了することができます。
>>> exit()
Python のリストを扱う
リストは Python のデータ構造の一種です。データ構造とは、データを効率的に使用できるように整理して保存する方法です。リストは非常に汎用性が高く、数値、文字列、さらには他のリストなど、さまざまな型のアイテムを格納することができます。このステップでは、リストに対する様々な操作の方法を学びます。
文字列からリストを作成する
Python のリストを扱い始めるには、まず Python の対話型セッションを開く必要があります。これは、Python コードをすぐに記述して実行できる特別な環境のようなものです。このセッションを開始するには、ターミナルに次のコマンドを入力します。
python3
Python の対話型セッションに入ったら、文字列からリストを作成しましょう。文字列は単なる文字の並びです。空白で区切られたいくつかの株式シンボルを含む文字列を定義し、その文字列をリストに変換します。各株式シンボルはリストの要素になります。
>>> symbols = 'HPQ AAPL IBM MSFT YHOO GOOG'
>>> symlist = symbols.split() ## 文字列を空白で分割する
>>> symlist
['HPQ', 'AAPL', 'IBM', 'MSFT', 'YHOO', 'GOOG']
split() メソッドは、空白があるところで文字列を分割するために使用されます。分割された各部分は新しいリストの要素になります。
リスト要素のアクセスと変更
文字列と同様に、リストもインデックス付けをサポートしています。インデックス付けとは、リスト内の個々の要素をその位置によってアクセスできることを意味します。Python では、リストの最初の要素のインデックスは 0、2 番目の要素のインデックスは 1 というようになります。また、負のインデックスを使用してリストの末尾から要素にアクセスすることもできます。最後の要素のインデックスは -1、最後から 2 番目の要素のインデックスは -2 というようになります。
文字列とは異なり、リストの要素は変更することができます。つまり、リスト内の要素の値を変更することができます。
>>> symlist[0] ## 最初の要素
'HPQ'
>>> symlist[1] ## 2 番目の要素
'AAPL'
>>> symlist[-1] ## 最後の要素
'GOOG'
>>> symlist[-2] ## 最後から 2 番目の要素
'YHOO'
>>> symlist[2] = 'AIG' ## 3 番目の要素を置き換える
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG']
リストの反復処理
多くの場合、リスト内の各要素に対して同じ操作を行う必要があります。このような場合、for ループを使用することができます。for ループを使用すると、リスト内の各要素を順番に処理し、特定のアクションを実行することができます。
>>> for s in symlist:
... print('s =', s)
...
このコードを実行すると、リスト内の各要素が s = というラベル付きで出力されます。
s = HPQ
s = AAPL
s = AIG
s = MSFT
s = YHOO
s = GOOG
メンバーシップの確認
時には、特定のアイテムがリスト内に存在するかどうかを確認する必要があります。このような場合、in 演算子を使用することができます。in 演算子は、アイテムがリスト内に存在する場合は True を返し、存在しない場合は False を返します。
>>> 'AIG' in symlist
True
>>> 'AA' in symlist
False
>>> 'CAT' in symlist
False
要素の追加と削除
リストには、要素を追加したり削除したりするための組み込みメソッドがあります。append() メソッドはリストの末尾に要素を追加します。insert() メソッドはリストの特定の位置に要素を挿入します。remove() メソッドは、要素の値に基づいてリストから要素を削除します。
>>> symlist.append('RHT') ## 末尾に要素を追加する
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>> symlist.insert(1, 'AA') ## 特定の位置に挿入する
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>> symlist.remove('MSFT') ## 値によって削除する
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'YHOO', 'GOOG', 'RHT']
リスト内に存在しない要素を削除しようとすると、Python はエラーを発生させます。
>>> symlist.remove('MSFT')
次のようなエラーメッセージが表示されます。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
また、index() メソッドを使用して、リスト内の要素の位置を見つけることもできます。
>>> symlist.index('YHOO')
4
>>> symlist[4] ## その位置の要素を確認する
'YHOO'
リストのソート
リストはインプレースでソートすることができます。つまり、元のリストが変更されます。リストをアルファベット順または逆順にソートすることができます。
>>> symlist.sort() ## アルファベット順にソートする
>>> symlist
['AA', 'AAPL', 'AIG', 'GOOG', 'HPQ', 'RHT', 'YHOO']
>>> symlist.sort(reverse=True) ## 逆順にソートする
>>> symlist
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
入れ子リスト
リストは、他のリストを含む任意の型のオブジェクトを格納することができます。これを入れ子リストと呼びます。
>>> nums = [101, 102, 103]
>>> items = [symlist, nums]
>>> items
[['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA'], [101, 102, 103]]
入れ子リスト内の要素にアクセスするには、複数のインデックスを使用します。最初のインデックスは外側のリスト要素を選択し、2 番目のインデックスは内側のリスト要素を選択します。
>>> items[0] ## 最初の要素(symlist)
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>> items[0][1] ## symlist の 2 番目の要素
'RHT'
>>> items[0][1][2] ## 'RHT' の 3 番目の文字
'T'
>>> items[1] ## 2 番目の要素(nums リスト)
[101, 102, 103]
>>> items[1][1] ## nums の 2 番目の要素
102
Python の対話型セッションでの作業が終了したら、次のように入力してセッションを終了できます。
>>> exit()
Python の辞書を扱う
Python では、辞書(dictionary)は基本的なデータ構造です。辞書はキーと値のペアを格納するもので、ある値(値)を別のもの(キー)にマッピングすることができます。これは、自然なキーと値の関係を持つデータを扱う際に非常に便利です。たとえば、人の名前(キー)をその年齢(値)にマッピングしたり、この実験で見るように、株式シンボル(キー)をその価格(値)にマッピングしたりすることができます。
辞書の作成とアクセス
まず、新しい Python 対話型セッションを開きましょう。これは、Python コードを一行ずつ記述して実行できる特別な環境に入るようなものです。このセッションを開始するには、ターミナルを開き、次のコマンドを入力します。
python3
Python 対話型セッションに入ったら、辞書を作成することができます。ここでは、株式シンボルをその価格にマッピングする辞書を作成します。以下はその方法です。
>>> prices = {'IBM': 91.1, 'GOOG': 490.1, 'AAPL': 312.23}
>>> prices
{'IBM': 91.1, 'GOOG': 490.1, 'AAPL': 312.23}
最初の行では、prices という名前の辞書を作成し、いくつかのキーと値のペアを割り当てています。キーは株式シンボル(IBM、GOOG、AAPL)で、値は対応する価格です。2 行目は、prices 辞書の内容を表示しています。
では、キーを使用して辞書内の値にアクセスし、変更する方法を見てみましょう。
>>> prices['IBM'] ## キー 'IBM' の値にアクセス
91.1
>>> prices['IBM'] = 123.45 ## 既存の値を更新
>>> prices
{'IBM': 123.45, 'GOOG': 490.1, 'AAPL': 312.23}
>>> prices['HPQ'] = 26.15 ## 新しいキーと値のペアを追加
>>> prices
{'IBM': 123.45, 'GOOG': 490.1, 'AAPL': 312.23, 'HPQ': 26.15}
最初の行では、キー IBM に関連付けられた値にアクセスしています。2 行目と 3 行目では、キー IBM の値を更新し、新しいキーと値のペア(価格が 26.15 の HPQ)を追加しています。
辞書のキーを取得する
時には、辞書内のすべてのキーのリストを取得したいことがあります。これを行う方法はいくつかあります。
>>> list(prices) ## 辞書のキーをリストに変換
['IBM', 'GOOG', 'AAPL', 'HPQ']
ここでは、list() 関数を使用して、prices 辞書のキーをリストに変換しています。
keys() メソッドを使用することもできます。このメソッドは dict_keys と呼ばれる特別なオブジェクトを返します。
>>> prices.keys() ## dict_keys オブジェクトを返す
dict_keys(['IBM', 'GOOG', 'AAPL', 'HPQ'])
辞書の値を取得する
同様に、辞書内のすべての値を取得したいことがあります。この場合は values() メソッドを使用することができます。
>>> prices.values() ## dict_values オブジェクトを返す
dict_values([123.45, 490.1, 312.23, 26.15])
このメソッドは、prices 辞書内のすべての値を含む dict_values オブジェクトを返します。
項目の削除
辞書からキーと値のペアを削除したい場合は、del キーワードを使用することができます。
>>> del prices['AAPL'] ## 'AAPL' のエントリを削除
>>> prices
{'IBM': 123.45, 'GOOG': 490.1, 'HPQ': 26.15}
ここでは、prices 辞書からキー AAPL のキーと値のペアを削除しています。
キーの存在を確認する
辞書内にキーが存在するかどうかを確認するには、in 演算子を使用することができます。
>>> 'IBM' in prices
True
>>> 'AAPL' in prices
False
in 演算子は、キーが辞書内に存在する場合は True を返し、存在しない場合は False を返します。
辞書のメソッド
辞書にはいくつかの便利なメソッドがあります。いくつか見てみましょう。
>>> prices.get('MSFT', 0) ## キーが存在しない場合はデフォルト値を返す
0
>>> prices.get('IBM', 0)
123.45
>>> prices.update({'MSFT': 25.0, 'GOOG': 500.0}) ## 複数の値を更新
>>> prices
{'IBM': 123.45, 'GOOG': 500.0, 'HPQ': 26.15, 'MSFT': 25.0}
get() メソッドは、キーに関連付けられた値を取得しようとします。キーが存在しない場合は、デフォルト値(この場合は 0)を返します。update() メソッドは、辞書内の複数のキーと値のペアを一度に更新するために使用されます。
Python 対話型セッションでの作業が終了したら、次のように入力してセッションを終了できます。
>>> exit()
まとめ
この実験では、Python の様々な組み込みオブジェクトの使い方を学びました。具体的には、Python の数値とそのメソッドに関する操作を習得し、インデックス付け、スライシング、組み込み関数を通じて文字列を操作し、ソートや入れ子構造の扱いを含むリストの作成と変更を行い、辞書を使用してキーと値の格納と取得を行いました。
これらの基本的なスキルは、より高度な Python プログラミングの基礎となります。これらの操作を定期的に練習することで、Python の組み込みデータ型に対する理解が深まります。