Pythonの組み込みデータ構造徹底解説|リスト・タプル・セット・辞書の基本と使い方
この記事では、Pythonに標準で組み込まれている4つの主要なデータ構造――リスト(List)、タプル(Tuple)、セット(Set)、辞書(Dictionary)について、それぞれの特徴と基本的な使い方をサンプルコードとともに解説します。
リスト(List)
リストは、要素が順序付けられたシーケンス型のデータ構造です。単一の値を表すスカラー型とは異なり複数の要素をまとめて扱うことができ、ミュータブル(変更可能)な性質を持ちます。同じデータ型の要素しか格納できない配列と違って、リストでは文字列・整数・浮動小数点数・複素数など、異なるデータ型を自由に混在させられる点が大きな特徴です。
リストの個々の要素には、インデックスを角括弧 [ ] で囲んでアクセスします。
それでは、具体的なコード例を見てみましょう。
コード例
lis = ['tutorialspoint', 786, 34.56, 2+3j]
# リストの要素を1つずつ表示
for i in lis:
print(i)
# リストの末尾に要素を追加
lis.append('python')
# リストの長さを表示
print('length of list is:', len(lis))
# リストの末尾から要素を削除
lis.pop()
print(lis)
実行結果
tutorialspoint 786 34.56 (2+3j) length of list is: 5 ['tutorialspoint', 786, 34.56, (2+3j)]
タプル(Tuple)
タプルもリストと同様に、順序付けられたシーケンス型の非スカラーデータ構造です。ただし、タプルはイミュータブル(変更不可)である点が決定的に異なります。一度生成したタプルは、要素の追加・削除・変更が一切できません。
タプルの要素は、丸括弧 ( ) の中にカンマで区切って記述します。要素はすべて同じデータ型でも、異なるデータ型が混在していても構いません。
以下の例を見てみましょう。
コード例
tup = ('tutorialspoint', 786, 34.56, 2+3j)
# タプルの要素を1つずつ表示
for i in tup:
print(i)
# タプルへの要素追加はエラーになる(イミュータブルのため)
# tup.append('python')
# タプルの長さを表示
print('length of tuple is:', len(tup))
# タプルからの要素削除もエラーになる
# tup.pop()
実行結果
tutorialspoint 786 34.56 (2+3j) length of tuple is: 4
セット(Set)
セットは、重複のない要素から構成される順序なしのコレクションです。すべての要素を波括弧 { } で囲むことで作成できるほか、set() 関数による型変換(キャスト)でも生成できます。
セットの要素はイミュータブルなデータ型である必要があります。また、セットはインデックス指定・スライス・連結・繰り返しといった操作をサポートしていません。代わりに、forループなどで各要素を直接反復処理することになります。
コード例
set_ = {'tutorial', 'point', 'python'}
# セットの要素を1行で表示
for i in set_:
print(i, end=' ')
# 最大値と最小値を表示
print(max(set_))
print(min(set_))
# セットの長さを表示
print(len(set_))
実行結果
tutorial point python tutorial point 3
辞書(Dictionary)
辞書は、キー(key)と値(value)のペアを格納するコレクションです。キーには文字列や数値など任意のイミュータブルな型を使用でき、これらのキーがいわば「インデックス」の役割を果たします。辞書も波括弧 { } を使って定義します。
値へは、それぞれに紐づいた一意のキーを通じてアクセスします。意味のない数値インデックスではなく、分かりやすいキー名でデータを管理できるのが辞書の大きな利点です。
コード例
# 空の辞書を作成 d = dict() # キーと値のペアを追加 d['tutorial'] = 786 d['point'] = 56 # キーの最小値と最大値を表示 print(min(d), max(d)) # キーのみを表示 print(d.keys()) # 値のみを表示 print(d.values())
実行結果
point tutorial dict_keys(['tutorial', 'point']) dict_values([786, 56])
4つのデータ構造の比較
最後に、今回紹介した4つのデータ構造の違いを表にまとめます。用途に応じて適切なものを選択しましょう。
| データ構造 | 順序 | 変更可否 | 重複 | 主な用途 |
|---|---|---|---|---|
| リスト | あり | 可 | 許容される | 順序付きデータの管理 |
| タプル | あり | 不可 | 許容される | 変更されない固定データ |
| セット | なし | 可(要素は不変型) | 不可 | 重複排除・集合演算 |
| 辞書 | 挿入順を保持(3.7以降) | 可 | キーは不可・値は可 | キーと値の対応付け |
まとめ
この記事では、Pythonに標準で組み込まれているリスト・タプル・セット・辞書という4つのデータ構造の特徴と、その基本的な実装方法を学びました。それぞれの特性(変更可能性・順序・重複の扱い)を正しく理解し、場面に応じて使い分けることが、効率的で読みやすいPythonコードを書くための第一歩となります。
-
Pythonでテキストエリア(TEXTAREA)のデータをCGIプログラムに渡す方法
複数行のテキストデータをCGIプログラムに送信したい場合には、HTMLのTEXTAREA要素を使用します。TEXTAREAは、ユーザーが自由に複数行の文章を入力できる入力欄を提供し、その内容は通常のテキストフィールドと同じようにCGIプログラムへ渡されます。 TEXTAREAを使ったフォームのHTMLコード例 以下は、TEXTAREAボックスを含むフォームのHTMLコード例です。 <form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
-
Pythonによる巡回冗長検査(CRC)の実装方法とサンプルコード
巡回冗長検査(CRC)とは 巡回冗長検査(CRC:Cyclic Redundancy Check)は、デジタルデータ内の誤りを検出するために広く利用されている手法で、伝送エラーの検出に特に有効な技術として知られています。この手法の計算の中核を担っているのは「2進数の除算(バイナリ除算)」です。 CRCでは、一連の冗長ビットからなる「CRCビット(検査用ビット)」を使用します。これらのビットはデータ単位(データワード)の末尾に付加され、付加後のデータ単位全体が、あらかじめ決められた特定の2進数(除数)でちょうど割り切れるように構成されます。 受信側での誤り判定の流れ 受信側では、受信したデータ