動画で学習内容の重要ポイントをチェックしたら、記事を読み、問題を解いて理解を深めましょう。
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}