1 データ構造

データ構造 (data structure)とは、データを整理してメモリに格納する方法を指します。データ構造は、データにアクセスし、操作し、効率的に保存する方法であり、コンピュータサイエンスとプログラミングにおいて重要な役割を果たしています。この記事では、リスト (list)、タプル (tuple)、辞書 (dictionary)、セット (set)という4つの基本的なデータ構造について説明します。

1.1 リスト

リストは、単一の変数に複数の要素を格納するために使用される「Python」プログラミングのデータ構造の一種です。リスト内の要素は順序付けされており、内容を変更することができ (mutable)、異なるデータ型の要素を含めることができます。インデックス (index)の位置を使用して、リスト内の要素にアクセスできます。

リストの例を見てみましょう:

# Creating a list of integers
numbers = [1, 2, 3, 4, 5]
print(numbers)
[1, 2, 3, 4, 5]

角括弧 (square brackets) [] 内に要素を囲むことでリストを定義できます 。各要素はカンマで区切られています。「Python」言語のインデックスはゼロから始まります。この番号のつけ方は、zero-based numbering と呼ばれます。つまり、リストの最初の要素に0でアクセスできます:

print(numbers[0])  # The first element of "numbers"
print(numbers[1])  # The second element of "numbers"
1
2

リストには、さまざまなタイプのオブジェクトを保存できます:

# Creating a list of strings:
fruits = ["apple", "banana", "orange", "kiwi"]
print(fruits)

# Creating a list of mixed data types:
mixed_list = [1, "hello", 3.14, True]
print(mixed_list)
['apple', 'banana', 'orange', 'kiwi']
[1, 'hello', 3.14, True]

1.2 タプル

タプルは、「Python」プログラミングのもう1つのデータ構造であり、リストと似ていますが、重要な違いが1つあります。タプルは不変 (immutable)であり、一度定義すると要素を変更できません。タプルは通常、変更する必要のない一連の要素を格納するために使用されます。

「Python」言語のタプルは、括弧 () を使用して定義され、一連の要素を含めることができます:

# Creating a tuple of integers
my_tuple = (1, 2, 3, 4, 5)
print(my_tuple)
(1, 2, 3, 4, 5)

前述のようにタプルは不変であるため、タプルを作成した後でタプルの値を編集することはできません。一方、リストは変更可能です:

# List is mutable.
# You can edit the elements in a list after creating it.
l = [1, 2, 3, 4]
print(l)

l[0] = 10  # Replace the first element with 10
print(l)
[1, 2, 3, 4]
[10, 2, 3, 4]
# Tuple is immutable.
# You can NOT edit the elements in a tuple after creating it.
t = (1, 2, 3, 4)
print(t)

# Don't care about try and except.
# These are just for handling the error.
try:
    t[0] = 10  # This raises an error.
except TypeError as e:
    print(e)
(1, 2, 3, 4)
'tuple' object does not support item assignment

2 辞書

「Python」言語の辞書は、キーと値のペア (key-value pair) を格納するデータ構造です。辞書の各キーは一意であり、対応する値にアクセスするために使用されます。辞書は順序だって値を保存せず (unordered)、また変更可能です。つまり、インデックスを使って辞書の要素にアクセスすることはできず、作成後に辞書を編集することができます。

辞書は 波括弧 (curly brackets) {} を使用して定義されます。最小単位は1つの キーと値のペアであり、キーと値は : で区切られています。複数のキーと値のペアは , で区切られています。

# Creating a dictionary
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

辞書 my_dict において、name はキーであり、John は対応する値です。キーを指定することにより、対応する値にアクセスすることができます:

# Accessing values in a dictionary
print(my_dict['name']) # Output: John
print(my_dict.get('age')) # Output: 30
John
30

上記のコードでわかるように、キーを介して値にアクセスするには2つの方法があります。どちらでもかまいませんが、指定されたキーが辞書に存在しない場合でもエラーが発生しないため、get() がより安全な方法です:

try:
    my_dict['NOTEXIST']
except KeyError as e:
    print(f"Key does not exist: {e}")
Key does not exist: 'NOTEXIST'
print(my_dict.get('NOTEXIST'))
None

辞書は変更可能なので、編集することができます:

print(f"Original: {my_dict}")
# Adding a new key-value pair
my_dict['gender'] = 'male'
print(f"Added gender: {my_dict}")

# Updating the value of a key
my_dict['age'] = 31
print(f"Changed age: {my_dict}")

# Removing a key-value pair
del my_dict['city']
print(f"Removed city: {my_dict}")
Original: {'name': 'John', 'age': 30, 'city': 'New York'}
Added gender: {'name': 'John', 'age': 30, 'city': 'New York', 'gender': 'male'}
Changed age: {'name': 'John', 'age': 31, 'city': 'New York', 'gender': 'male'}
Removed city: {'name': 'John', 'age': 31, 'gender': 'male'}

2.1 セット

「Python」言語におけるセットは、重複のない要素の集まりです。セットは順序付けされておらず、また変更可能です。セットから要素を追加または削除することが可能です。セットは、重複のない複数の要素を取得する際に特に便利です。

l = [1, 3, 9, 2, 1, 9, 1, 2, 6, 7]  # List
print(l)

s = set(l)  # Create a set
print(s)

new_l = list(s)  # Convert to list
print(new_l)
[1, 3, 9, 2, 1, 9, 1, 2, 6, 7]
{1, 2, 3, 6, 7, 9}
[1, 2, 3, 6, 7, 9]

3 Exercise

Exercise 1 (1)

  • 要素のインデックスを指定することにより、以下のリストの25番目の要素を抽出してください。
  • その後、その要素の値を変数num_25に格納してください。
numbers = [1, 3, 5, 6, 7, 8, 10, 20, 21, 23, 24, 28, 29, 32, 33, 39, 41, 43, 50, 51, 57, 59, 60, 61, 62, 63, 66, 73, 74, 76, 78, 80, 81, 82, 84, 86, 91, 92, 93, 95, 96]

(2)

  • 辞書 rectangles の2番目の要素を抽出してください。
  • 抽出した要素 (辞書) のbaseの値を抽出し、変数baseに格納してください。
  • 同様にheightの値を抽出し、変数heightに格納してください。
  • 上記の base と height を使って、長方形の面積を計算してください。
  • その面積をrectanglesの2番目の要素に格納してください。キーはarea である必要があります。
  • rectangles を出力し、上記のareaが正しく追加されたかどうかを確認してくださいs。
rectangles = [{"base": 10, "height": 5}, {"base": 7, "height": 3}, {"base": 6, "height": 4}]

(3)

  • numbers の重複のない要素の数を数えてください。必要があれば、 len() 関数について調べてください。
  • その後、上記の値を変数num_numbersに保存してください。
numbers = [2, 0, 10, 8, 4, 3, 20, 10, 10, 20, 7, 18, 9, 13, 3, 6, 20, 19, 3, 4, 17, 5, 8, 8, 16, 9, 18, 10, 3, 6]

4 Answers

(1)

numbers = [1, 3, 5, 6, 7, 8, 10, 20, 21, 23, 24, 28, 29, 32, 33, 39, 41, 43, 50, 51, 57, 59, 60, 61, 62, 63, 66, 73, 74, 76, 78, 80, 81, 82, 84, 86, 91, 92, 93, 95, 96]
num_25 = numbers[24]
print(num_25)
62

(2)

rectangles = [{"base": 10, "height": 5}, {"base": 7, "height": 3}, {"base": 6, "height": 4}]

base = rectangles[1]["base"]
height = rectangles[1]["height"]
area = base * height
rectangles[1]["area"] = area
print(rectangles)
[{'base': 10, 'height': 5}, {'base': 7, 'height': 3, 'area': 21}, {'base': 6, 'height': 4}]

(3)

numbers = [2, 0, 10, 8, 4, 3, 20, 10, 10, 20, 7, 18, 9, 13, 3, 6, 20, 19, 3, 4, 17, 5, 8, 8, 16, 9, 18, 10, 3, 6]
num_numbers = len(set(numbers))
print(num_numbers)
print(set(numbers))
16
{0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 16, 17, 18, 19, 20}