Python
 Computer >> コンピューター >  >> プログラミング >> Python

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コードを書くための第一歩となります。

  1. Pythonでテキストエリア(TEXTAREA)のデータをCGIプログラムに渡す方法

    複数行のテキストデータをCGIプログラムに送信したい場合には、HTMLのTEXTAREA要素を使用します。TEXTAREAは、ユーザーが自由に複数行の文章を入力できる入力欄を提供し、その内容は通常のテキストフィールドと同じようにCGIプログラムへ渡されます。 TEXTAREAを使ったフォームのHTMLコード例 以下は、TEXTAREAボックスを含むフォームのHTMLコード例です。 <form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">

  2. Pythonによる巡回冗長検査(CRC)の実装方法とサンプルコード

    巡回冗長検査(CRC)とは 巡回冗長検査(CRC:Cyclic Redundancy Check)は、デジタルデータ内の誤りを検出するために広く利用されている手法で、伝送エラーの検出に特に有効な技術として知られています。この手法の計算の中核を担っているのは「2進数の除算(バイナリ除算)」です。 CRCでは、一連の冗長ビットからなる「CRCビット(検査用ビット)」を使用します。これらのビットはデータ単位(データワード)の末尾に付加され、付加後のデータ単位全体が、あらかじめ決められた特定の2進数(除数)でちょうど割り切れるように構成されます。 受信側での誤り判定の流れ 受信側では、受信したデータ