Sahara3のAI副業

AI副業でどこまでいけるのか?

AI副業:Pythonのプログラミング基礎編3:リストとタプル

「さはら3」です。

AI副業でどこまでいけるのか?をテーマに頑張っていきたいと思います。


今回は、ChatGPTに教わるPythonの基礎編3(基本概念の続き)となります。


ChatGPTへの問いかけ

AIさはら基本概念は他にありますか?

ChatGPT はい、Pythonの基本概念には、上記で述べたもの以外にもいくつかの重要な概念があります。

4 リストとタプル

5 辞書

6 関数

7 クラスとオブジェクト

8 エラーハンドリング

9 ファイル操作

→今回は長くなりそうなので、リストとタプルについて記載いたします。


4. リストとタプル

  • リスト(list): 複数の要素を格納できるデータ構造です。リストは変更可能(mutable)です。
  my_list = [1, 2, 3, "Python"]
  • タプル(tuple): リストと同様に複数の要素を格納できますが、タプルは変更不可能(immutable)です。
  my_tuple = (1, 2, 3, "Python")

AIさはらリストとタプルについて詳しく教えてください。

ChatGPTもちろんです。

リストとタプルは、Pythonにおいて複数の要素を格納するための基本的なデータ構造ですが、それぞれ異なる特性を持っています。


リスト(list)

  • 定義: リストは[]を使用して定義します。要素は,で区切ります。
my_list = [1, 2, 3, "Python"]
print(my_list)

このコードを実行すると、my_listに格納されているリストがコンソールに出力されます。

具体的には、以下のように表示されます:

[1, 2, 3, 'Python']

このリストは、整数の123と文字列の'Python'を要素として含んでいます。

リストは異なるデータ型の要素を混在させることができます。


変更可能性

  • リストは変更可能(mutable)です。要素の追加、削除、変更ができます。
my_list.append(4)  # 要素の追加
print(my_list)
my_list[3] = "Java"  # 要素の変更
print(my_list)
del my_list[1]  # 要素の削除
print(my_list)

このコードを実行すると、各操作の後でリストの内容が出力されます。以下は、出力結果の予想です:

  1. my_list.append(4)4がリストの末尾に追加された後のリストを出力:
[1, 2, 3, 'Python', 4]
  1. my_list[3] = "Java"でインデックス3の要素が"Java"に変更された後のリストを出力:
[1, 2, 3, 'Java', 4]
  1. del my_list[1]でインデックス1の要素が削除された後のリストを出力:
[1, 3, 'Java', 4]

このように、コードの各ステップでリストの変化が確認できます。


スライシング

  • リストの一部を取得することができます。
sublist = my_list[1:3]  # インデックス1から2までの要素を取得
print(sublist)

このコードを実行すると、my_listのインデックス1からインデックス2までの要素を含む新しいリストsublistが作成され、その内容が出力されます。

前のステップでmy_listの内容は[1, 3, 'Java', 4]となっているので、このコードを実行すると以下のように出力されます:

[3, 'Java']

このsublistは、my_listのインデックス1にある3と、インデックス2にある'Java'を要素として含んでいます。


メソッド

  • リストには、要素の追加、削除、ソートなどを行うための多くのメソッドがあります。
my_list.sort()  # リストのソート
print(my_list.sort())
my_list.reverse()  # リストの逆順
print(my_list.reverse())

list.sort()メソッドとlist.reverse()メソッドは、リストを直接変更しますが、何も返さない(正確にはNoneを返す)ため、print(my_list.sort())print(my_list.reverse())Noneを出力します。

リストをソートまたは逆順にした結果を出力するには、メソッドを呼び出した後にリスト自体を出力する必要があります。

→なるほど。リストを直接ソートしてしまうのですね。

以下のようにコードを修正できます:

my_list.sort()  # リストのソート
print(my_list)  # ソート後のリストを出力

my_list.reverse()  # リストの逆順
print(my_list)  # 逆順後のリストを出力

また、my_listには異なるデータ型の要素(整数と文字列)が含まれているため、my_list.sort()を呼び出すとエラーが発生します。

→しれっと噓をつかれました。

同じデータ型の要素を持つリストに対してのみ、sort()メソッドを使用できます。

例えば、全ての要素が整数の場合、または全ての要素が文字列の場合にsort()メソッドを使用できます。

my_listには異なるデータ型の要素(整数と文字列)が含まれているため、my_list.sort()を呼び出すと、Pythonは異なるタイプの要素を比較できず、TypeErrorが発生します。

ただし、my_list.reverse()は問題なく動作し、リストの要素を逆順にします。これは、reverse()メソッドは要素の値を比較せず、単に要素の順序を逆にするためです。

以下は、異なるデータ型の要素を持つリストに対してsort()を呼び出すと発生するエラーを避けるための修正されたコードです:

# my_list.sort()  # エラー: 異なるデータ型の要素を持つリストをソートできません
print(my_list)  # ソートをコメントアウトしたので、元のリストを出力

my_list.reverse()  # リストの逆順
print(my_list)  # 逆順後のリストを出力

このコードを実行すると、最初にmy_list.sort()コメントアウトされているため、my_listの現在の状態が出力されます。

その後、my_list.reverse()によってリストが逆順になり、その結果が出力されます。

前のステップでmy_listの内容は[1, 3, 'Java', 4]でしたので、以下のように出力されます:

[1, 3, 'Java', 4]  # ソートをコメントアウトしたので、元のリストを出力
[4, 'Java', 3, 1]  # リストの逆順後の出力

このように、reverse()メソッドはリストの要素の順序を逆にし、その結果を出力します。

→一瞬嘘をつかれましたが、ちゃんと説明して頂けました。


タプル(tuple)

  • 定義: タプルは()を使用して定義します。要素は,で区切ります。
my_tuple = (1, 2, 3, "Python")
print(my_tuple)

このコードを実行すると、タプルmy_tupleの内容がコンソールに出力されます。具体的には、以下のように表示されます:

(1, 2, 3, 'Python')

このタプルは、整数の123と文字列の'Python'を要素として含んでいます。タプルもリスト同様、異なるデータ型の要素を混在させることができます。

変更不可能性

  • タプルは変更不可能(immutable)です。一度タプルが作成されると、その要素を変更、追加、削除することはできません。
my_tuple[1] = 4  # エラー: タプルは変更不可能

タプルは変更不可能(immutable)なので、一度作成されたタプルの要素を変更することはできません。

したがって、上記のコードはエラーを引き起こします。

このコードを実行すると、PythonTypeErrorを発生させ、タプルオブジェクトは要素の代入をサポートしていないことを示します。

タプルの要素を変更する必要がある場合、新しいタプルを作成する必要があります。

用途

  • タプルは、変更されることなく、複数の値を保持する必要がある場合に使用されます。例えば、関数が複数の値を返す際にタプルが利用されます。
def get_coordinates():
  return (4, 5)  # タプルを返す

この関数get_coordinatesは、タプル(4, 5)を返します。

これは、2つの要素45を含むタプルです。

この関数を呼び出すと、返されたタプルを変数に格納することができます。

以下は、この関数を呼び出し、返されたタプルを変数に格納する例です:

coordinates = get_coordinates()  # タプルを変数に格納
print(coordinates)  # (4, 5) を出力

このコードを実行すると、get_coordinates関数がタプル(4, 5)を返し、それがcoordinates変数に格納されます。

その後、print(coordinates)によって、タプルの内容がコンソールに出力されます。

したがって、出力結果は以下のようになります:

(4, 5)

この出力は、get_coordinates関数によって返されたタプルの内容を示しています。

アンパック

  • タプルの要素は、複数の変数にアンパック(unpack)することができます。
  x, y = (4, 5)  # xに4が、yに5が代入される

この行のコードは、タプルのアンパッキング(unpacking)を行っています。

タプル(4, 5)の各要素が、変数xyにそれぞれ代入されます。

具体的には、 - xには4が代入され、 - yには5が代入されます。

この後、xyを使用して、これらの変数にアクセスできます。例えば:

print(x)  # 4 を出力
print(y)  # 5 を出力

これにより、タプルの各要素を個別の変数に簡単に代入できます。

このコードは変数xyの内容を出力します。

前のステップでx, y = (4, 5)としたので、xには4が、yには5が代入されています。

したがって、このコードを実行すると、以下のように出力されます:

4
5

これにより、xyがそれぞれ45に正しく代入されていることが確認できます。


リストは、要素の変更や、要素の動的な追加、削除が必要な場合に適しています。

一方で、タプルは要素が固定で、変更されない場合に適しています。


主なリストの使い道

AIさはら主なリストの使い道を教えてください。

ChatGPT

リストは、Pythonで最も頻繁に使用されるデータ構造の一つであり、多くの用途があります。以下は、リストの主な使い道のいくつかです:

1. データの保持とアクセス

リストは、複数の要素を順序付けて保持するために使用されます。インデックスを使用して、リストの任意の位置にある要素にアクセスできます。

2. イテレーション

リストは、forループやwhileループを使用して、要素を一つずつ処理するために使用されます。

for element in my_list:
    print(element)

3. データの整理

リストは、データを整理し、ソートや逆順、スライスなどの操作を行うために使用されます。

my_list.sort()
my_list.reverse()

4. スタックやキューの実装

リストは、データ構造のスタックやキューを実装するためにも使用できます。append()メソッドとpop()メソッドを使用して、スタックのプッシュとポップ操作を模倣できます。

5. 多次元配列

リストの要素として他のリストを含めることで、2次元(または多次元)の配列を作成できます。これは、行列やグリッドデータを表現するのに便利です。

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

6. 動的なデータコレクション

リストのサイズは動的であり、要素の追加や削除によってサイズを変更できます。これにより、動的なデータコレクションの管理が可能になります。

これらの使い道に加えて、リストは他のデータ構造(例えば、セットやディクショナリ)と組み合わせて使用されることもあります。

リストの柔軟性と利便性により、Pythonプログラムにおいて非常に重要な役割を果たします。


主なタプルの使い道

AIさはら主なタプルの使い道を教えてください。

ChatGPT

タプルは、一度作成されると変更できない(immutable)という特性があります。

以下は、タプルの主な使い道です:

1. 不変のデータシーケンス

タプルは、変更されるべきでないデータシーケンスを表現するのに適しています。

例えば、月の名前や曜日の名前など、プログラムの実行中に変更されるべきでないデータを保持するのに使用できます。

days_of_week = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')

2. 複数の値の返却

関数が複数の値を一度に返す必要がある場合、タプルを使用できます。

def min_max(arr):
    return min(arr), max(arr)  # タプルを返す

3. パッキングとアンパッキング

タプルは、複数の変数を一つの変数にパックするのに使用できます。

また、一つのタプル変数から複数の変数にアンパックするのにも使用できます。

point = (x, y)  # パッキング
x, y = point  # アンパッキング

4. 辞書のキーとしての使用

タプルは、辞書のキーとして使用できます。

リストは変更可能なので辞書のキーとして使用できませんが、タプルは不変なのでキーとして使用できます。

my_dict = {('x', 1): 'a', ('y', 2): 'b'}

5. 名前付きタプル

collections.namedtupleを使用して、名前付きフィールドを持つタプルを作成できます。

これは、軽量なオブジェクトを作成するのに便利です。

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)

これらの使い道により、タプルはPythonプログラムにおいて多様な場面で利用されます。

特に、データの不変性が重要な場合や、複数の値を一つの変数で扱いたい場合に有用です。


おわりに

AIさはら

長くなってしまいましたが Pythonの基礎編3:リストとタプルはいかがでしたでしょうか?

リストとタプルはPythonに欠かせない要素となっておりますので、ぜひ習得いたしましょう。

次回は「辞書」を予定しております。


本日のAI着物美女

本日のAI着物美女

【おススメ漫画:Amazonアソシエイト

難波兄弟が描く宇宙・月面の旅 第43巻 2022/9/22発売

kindle版で購入し、いつでも読める状態にしてあります。

AI副業・プログラミングとは方向が異なりますが、おススメなのでまだの方は是非読んでみてください。


AI関連は日進月歩、日々之精進でございます。

最後まで読んで頂きありがとうございました。

AIさはら