<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「namedtuple」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/namedtuple/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Mon, 24 Nov 2025 21:05:53 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「namedtuple」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Python】namedtupleで名前付きタプルを使用する（collections.namedtuple）</title>
		<link>https://tech.nkhn37.net/python-collections-namedtuple/</link>
					<comments>https://tech.nkhn37.net/python-collections-namedtuple/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Thu, 18 Feb 2021 00:00:00 +0000</pubDate>
				<category><![CDATA[collections]]></category>
		<category><![CDATA[namedtuple]]></category>
		<category><![CDATA[OrderedDict]]></category>
		<category><![CDATA[_asdict]]></category>
		<category><![CDATA[_fields]]></category>
		<category><![CDATA[_make]]></category>
		<category><![CDATA[_replace]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=1087</guid>

					<description><![CDATA[名前付きでタプルにアクセスできる collections モジュールの namedtuple について解説します。 namedtuple（collectionsモジュール） Python の代表的な型であるタプル (tu [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">名前付きでタプルにアクセスできる <span class="jinr-d--text-color d--marker1 d--bold"><code>collections</code></span> モジュールの <span class="jinr-d--text-color d--marker1 d--bold"><code>namedtuple</code></span> について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold" id="namedtuple-collectionsモジュール"><code>namedtuple</code>（<code>collections</code>モジュール）</h2>



<p class="wp-block-paragraph">Python の代表的な型であるタプル (<code>tuple</code>) では、<code>[]</code> で位置を指定して値を取得したり、アンパック代入で変数に代入したりして使うことができます。</p>



<p class="wp-block-paragraph">しかし、要素数が多くなると、どの位置に何の情報が入っているかが分かりにくくなります。このような時、各値に名前付きでアクセスできると便利です。このような場合には、<span class="jinr-d--text-color d--marker1 d--bold"><code>collections</code></span> モジュールの <span class="jinr-d--text-color d--marker1 d--bold"><code>namedtuple</code></span> が使用できます。</p>



<p class="wp-block-paragraph">この記事では、<code>collections</code> モジュールの <code>namedtuple</code> について基本的な使い方を紹介します。また、使いどころや特徴についても説明します。</p>



<h3 class="wp-block-heading jinr-heading d--bold" id="namedtupleの定義と使い方"><code>namedtuple</code> の定義と使い方</h3>



<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold"><code>namedtuple</code></span> の定義と使い方を、以下の例で見ていきましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections

# named tupleの定義
Point = collections.namedtuple("Point", ["x", "y"])

# インスタンス化
p1 = Point(10, 20)
p2 = Point(x=30, y=40)
print(f"p1 = {p1}")
print(f"p2 = {p2}")

# フィールド名で値へアクセス
print(f"p1.x = {p1.x}, p1.y = {p1.y}")
print(f"p2.x = {p2.x}, p1.y = {p2.y}")

# アンパック代入
x1, y1 = p1
x2, y2 = p2
print(f"x1 = {x1}, y1 = {y1}")
print(f"x2 = {x2}, y2 = {y2}")</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
p1 = Point(x=10, y=20)
p2 = Point(x=30, y=40)
p1.x = 10, p1.y = 20
p2.x = 30, p1.y = 40
x1 = 10, y1 = 20
x2 = 30, y2 = 40</pre>



<p class="wp-block-paragraph">上記のサンプルプログラムについてポイントを説明していきます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections</pre>



<p class="wp-block-paragraph">まず、<code>namedtuple</code> を使うには <code>collections</code> モジュールのインポートが必要です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># named tupleの定義
Point = collections.namedtuple("Point", ["x", "y"])</pre>



<p class="wp-block-paragraph"><code>namedtuple</code> の定義では、タイプの名前とフィールドの名前を定義します。例では、<code>"Point"</code> という名前のタイプを定義し、フィールドとして <code>"x"</code>、<code>"y"</code> という名前のフィールドを定義しています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># インスタンス化
p1 = Point(10, 20)
p2 = Point(x=30, y=40)
print(f"p1 = {p1}")
print(f"p2 = {p2}")</pre>



<p class="wp-block-paragraph">定義した <code>namedtuple</code> をインスタンス化するためには上記のようにします。<code>"x"</code>、<code>"y"</code> に該当する値を順に引数に渡してもよいですし、「<code>x=</code>」「<code>y=</code>」のように設定したフィールド名のキーワード引数として指定も可能です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># フィールド名で値へアクセス
print(f"p1.x = {p1.x}, p1.y = {p1.y}")
print(f"p2.x = {p2.x}, p1.y = {p2.y}")</pre>



<p class="wp-block-paragraph">値にアクセスする場合には、インスタンス化した変数に対して「<code>.</code>」(ドット) で各フィールド名を指定してアクセスができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># アンパック代入
x1, y1 = p1
x2, y2 = p2
print(f"x1 = {x1}, y1 = {y1}")
print(f"x2 = {x2}, y2 = {y2}")</pre>



<p class="wp-block-paragraph">また、<code>namedtuple</code> は名前付きのタプルですので通常のタプルと同様にアンパック代入によって値を取り出してデータを扱うことも可能です。</p>



<p class="wp-block-paragraph">以上が、<code>namedtuple</code> の基本的な使い方です。以降では、<code>namedtuple</code> で使用できる便利な各種メソッドについて紹介します。</p>



<h3 class="wp-block-heading jinr-heading d--bold" id="namedtupleの各種メソッド"><code>namedtuple</code> の各種メソッド</h3>



<p class="wp-block-paragraph"><code>namedtuple</code> では便利な各種メソッドが用意されています。<code>namedtuple</code> のメソッド名は、フィールド名との衝突を避けるために「<code>_</code>　(アンダースコア)」で始まる名前となっています。</p>



<p class="wp-block-paragraph">一般的には <code>_</code>(アンダースコア) がついた変数やメソッドは、慣例としてクラス内のみで参照・使用される変数やメソッドというプライベートの意味があります（ただし、外部からのアクセスは可能です）。<code>namedtuple</code> は外部から使うメソッドとして定義されていることを覚えておいてください。</p>



<h4 class="wp-block-heading jinr-heading d--bold" id="makeで新しいnamedtupleを作成する"><code>_make</code> で新しい <code>namedtuple</code> を作成する</h4>



<p class="wp-block-paragraph">既存リストから <code>namedtuple</code> を作成する場合には、<span class="jinr-d--text-color d--marker1 d--bold"><code>_make</code></span> メソッドを使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections

Point = collections.namedtuple("Point", ["x", "y"])

data = [10, 20]
p_data = Point._make(data)
print(f"p_data = {p_data}")
print(p_data.x, p_data.y)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
p_data = Point(x=10, y=20)
10 20</pre>



<p class="wp-block-paragraph"><code>Point</code> という定義を作る点は基本的な使い方で紹介した通りですが、例では <code>data</code> というリストの値をもとに <code>namedtuple</code> のインスタンス <code>p_data</code> を作成しています。</p>



<h4 class="wp-block-heading jinr-heading d--bold" id="asdictで辞書としてnamedtupleの情報を取得する"><code>_asdict</code> で <code>namedtuple</code> を辞書に変換する</h4>



<p class="wp-block-paragraph"><code>namedtuple</code> を辞書に変換して使用したい場合は、<span class="jinr-d--text-color d--marker1 d--bold"><code>_asdict</code></span> メソッドを使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections

Point = collections.namedtuple("Point", ["x", "y"])

p1 = Point(10, 20)
p_dict = p1._asdict()

print(type(p_dict))
print(p_dict)
print(p_dict["x"])
print(p_dict["y"])</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
&lt;class 'dict'>
{'x': 10, 'y': 20}
10
20</pre>



<p class="wp-block-paragraph"><code>_asdict()</code> の返却値を <code>type</code> で確認すると <code>dict</code> となっていることが分かります。このように <code>dict</code> へ簡単に変換して扱うことができます。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox5 ">
			<i class="jif jin-ifont-v2speaker" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><code>_asdict()</code> の返却値は、バージョン 3.1 で <code>dict</code> の代わりに <code>OrderedDict</code> を返すようになりましたが、その後バージョン 3.8 から <code>dict</code> に戻っています。これはバージョン 3.7 で、通常の <code>dict</code> が順序付けられることが保証されたためです。</p>



<p class="wp-block-paragraph"><code>OrderedDict</code> の追加機能が必要な場合は、<code>OrderDict</code> に <code>OrderedDict(x._asdict())</code> といった形で変換することが推奨されています。公式ドキュメントの<a href="https://docs.python.org/ja/3/library/collections.html#collections.somenamedtuple._asdict" target="_blank" rel="noreferrer noopener">こちら</a>の記載を参考にしてください。</p>
</div>
		</div></section>



<h4 class="wp-block-heading jinr-heading d--bold" id="replaceで一部の値を変更した新しいnamedtupleを作成する"><code>_replace</code> で一部の値を変更した新しい <code>namedtuple</code> を作成する</h4>



<p class="wp-block-paragraph">作成した <code>namedtuple</code> をもとに一部の値を変更した新しい <code>namedtuple</code> のインスタンスを作成する場合には、<span class="jinr-d--text-color d--marker1 d--bold"><code>_replace</code></span> メソッドを使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections

Point = collections.namedtuple("Point", ["x", "y"])

p1 = Point(10, 20)

# p1のxの値を置き換える
print(p1._replace(x=50))
# p1の値が書き換わるわけではないので注意
print(p1, "\n")

# 値を書き換えた場合は別のインスタンスに代入する
p2 = p1._replace(x=50)
print(f"p1 = {p1}")
print(f"p2 = {p2}")</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
Point(x=50, y=20)
Point(x=10, y=20)

p1 = Point(x=10, y=20)
p2 = Point(x=50, y=20)</pre>



<p class="wp-block-paragraph">タプルはイミュータブルで変更不可なものなので、<code>_replace</code> メソッドは既存の <code>namedtuple</code> そのものの値を置き換えるわけではなく、<span class="jinr-d--text-color d--marker1 d--bold">値を置き換えた <code>namedtuple</code> のインスタンスの変数を返却する</span>ことに注意してください。</p>



<h4 class="wp-block-heading jinr-heading d--bold" id="fieldsによりフィールド名を取得する"><code>_fields</code> によりフィールド名を取得する</h4>



<p class="wp-block-paragraph"><code>namedtuple</code> のフィールド名を取得するには、<span class="jinr-d--text-color d--marker1 d--bold"><code>_fields</code></span> メソッドを使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections

Point = collections.namedtuple("Point", ["x", "y"])

p1 = Point(10, 20)
print(p1._fields)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
('x', 'y')</pre>



<p class="wp-block-paragraph">上記のように返却値は、フィールド名が列挙されたタプルで返却されます。</p>



<h3 class="wp-block-heading jinr-heading d--bold" id="namedtupleの使いどころ"><code>namedtuple</code> の使いどころ</h3>



<h4 class="wp-block-heading jinr-heading d--bold" id="csvの読み込みに使用する">CSV ファイルの読み込みに使用する</h4>



<p class="wp-block-paragraph"><code>namedtuple</code> の使いどころとしてよく紹介される CSV ファイルの読み込みについて例を使って紹介します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections
import csv

# CSVファイルを作成して保存する
with open("temp.csv", "w", newline="", encoding="UTF-8") as csv_write:
    fields = ["index", "value1", "value2", "value3"]
    writer = csv.DictWriter(csv_write, fieldnames=fields)

    writer.writeheader()
    for i in range(1, 6):
        writer.writerow(
            {
                "index": i,
                "value1": f"val1-{i}",
                "value2": f"val2-{i}",
                "value3": f"val3-{i}",
            }
        )

# CSVファイルをnamedtupleに読み込む
with open("temp.csv", "r", encoding="UTF-8") as csv_read:
    csv_reader = csv.reader(csv_read)

    # namedtupleを定義する（CSVの1行目を列名として定義）
    record = collections.namedtuple("record", next(csv_reader))
    # CSVのレコードを順次読み込む (namedtupleで1行を読み込む)
    data = [record._make(row) for row in csv_reader]

print(data)
# 1行目のデータに列名でアクセスする
print(data[0].index)
print(data[0].value1)
print(data[0].value2)
print(data[0].value3)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
[record(index='1', value1='val1-1', value2='val2-1', value3='val3-1'), record(index='2', value1='val1-2', value2='val2-2', value3='val3-2'), record(index='3', value1='val1-3', value2='val2-3', value3='val3-3'), record(index='4', value1='val1-4', value2='val2-4', value3='val3-4'), record(index='5', value1='val1-5', value2='val2-5', value3='val3-5')]
1
val1-1
val2-1
val3-1</pre>



<p class="wp-block-paragraph">この例では、まずサンプルの CSV を作成して <code>temp.csv</code> で書き込み、作ったデータを <code>namedtuple</code> に読み込んでいます。</p>



<p class="wp-block-paragraph">CSV ファイルを読み込む際には、CSV ファイルの列名を <code>namedtuple</code> で定義しておき、データを読み込む際に <code>namedtuple</code> に設定することで、その後データに列名で参照することができます。</p>



<p class="wp-block-paragraph"><code>next(csv_reader)</code> の部分で、CSV のヘッダーの列名情報を取得できるため、その値を使って <code>"record"</code> という <code>namedtuple</code> を定義しています。その後、データを読み込む際には、リスト内包表記を使って <code>_make</code> メソッドで <code>namedtuple</code> にして <code>data</code> というリストを作成しています。</p>



<p class="wp-block-paragraph">データへのアクセスは、列名である「<code>index</code>」「<code>value1</code>」「<code>value2</code>」「<code>value3</code>」を用いて直接それぞれにアクセスできていることが分かると思います。このようにしておくことで読み込んだデータ列を指定してデータを扱うことが容易になります。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox5 ">
			<i class="jif jin-ifont-v2speaker" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">CSV入出力やリスト内包表記については以下も参考にしてください。</p>



<ul class="wp-block-list jinr-list">
<li><a href="https://tech.nkhn37.net/python-csv/" target="_blank" rel="noreferrer noopener">CSVファイルの入出力</a></li>



<li><a href="https://tech.nkhn37.net/python-list-comprehension/" target="_blank" rel="noreferrer noopener">リスト (list) 内包表記の使い方</a></li>
</ul>
</div>
		</div></section>



<h4 class="wp-block-heading jinr-heading d--bold" id="関数の戻り値で使用する">関数の戻り値で使用する</h4>



<p class="wp-block-paragraph">関数の戻り値として複数の戻り値を返却する場合は、返却値が編集されてしまわないようにイミュータブルなタプルに返却値に設定するのが基本です。その際に、どれが何の値なのかを明示するために <code>namedtuple</code> を使うと便利です。</p>



<p class="wp-block-paragraph">以下の例の <code>calculate_stat</code> 関数は、入力された数値リストの最小値、最大値、平均、分散、標準偏差を計算して返却する関数です。</p>



<p class="wp-block-paragraph">※ 本来このままだど <code>data</code> に数値以外が入ってくるとエラーになるため問題がありますが、<code>namedtuple</code> の返却例ということで細かなチェック等を割愛しています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections
import statistics


def calculate_stat(data):
    min_v = min(data)
    max_v = max(data)
    mean_v = statistics.mean(data)
    var_v = statistics.variance(data)
    std_v = statistics.stdev(data)

    # 返却値をnamedtupleで定義
    Stat = collections.namedtuple("Stat", ["min", "max", "mean", "var", "std"])
    stats = Stat(min_v, max_v, mean_v, var_v, std_v)
    return stats


def main():
    values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
    result = calculate_stat(values)
    print(
        f"min:{result.min}, "
        f"max:{result.max}, "
        f"mean:{result.mean}, "
        f"var:{result.var}, "
        f"std:{result.std}"
    )


if __name__ == "__main__":
    main()</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
min:1, max:15, mean:8, var:20, std:4.47213595499958</pre>



<p class="wp-block-paragraph">例では、返却値を <code>"Stat"</code> というタイプの <code>namedtuple</code> にまとめて返却しています。</p>



<p class="wp-block-paragraph">通常のタプルで返却すると、何番目に最小値が入ってくるかといったことを覚えていないといけませんが、<code>namedtuple</code> を使用することで、呼び出した側は最小値なら <code>min</code>、最大値なら <code>max</code> といったように直感的に返却値を扱うことができます。</p>



<p class="wp-block-paragraph">このように関数の戻り値として <code>namedtuple</code> を使用することがあります。</p>



<h3 class="wp-block-heading jinr-heading d--bold"><code>namedtuple</code> の特徴</h3>



<p class="wp-block-paragraph"><code>namedtuple</code> の定義や使い方について見てきました。ここでは <code>namedtuple</code> の特徴について紹介します。</p>



<h4 class="wp-block-heading jinr-heading d--bold"><code>namedtuple</code> と辞書（<code>dict</code>）の違い</h4>



<p class="wp-block-paragraph">これまでの使用例で、<code>namedtuple</code> が Python 標準のタプル（<code>tuple</code>）よりも理解しやすく、扱いやすいということはご理解いただけたかと思います。しかし、同じことはPython 標準の辞書（<code>dict</code>）でも可能です。</p>



<p class="wp-block-paragraph"><code>namedtuple</code> と辞書（<code>dict</code>）で異なる点は以下のような点です。</p>



<ul class="wp-block-list jinr-list">
<li><code>namedtuple</code> はタプルの一種のため、変更不可（イミュータブル）であり、内部の長さは必要サイズに固定されている。一方で、辞書（<code>dict</code>）は必要な領域を余分に確保しているためメモリ使用効率は <code>namedtuple</code> の方が良い。</li>



<li><code>namedtuple</code> は、添え字でもアクセス可能でこの操作は高速に実行できる。辞書（<code>dict</code>）は内部構造としてハッシュテーブルの探索が必要となり最悪のケースでは遅くなる可能性がる。</li>
</ul>



<p class="wp-block-paragraph">パフォーマンスが要求されるようなコードの部分では添え字のインデックスを使ってアクセスすることで応答性を確保し、その他の場面では属性名でアクセスできる利便性を享受するといったことができる点が <code>namedtuple</code> の特徴です。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">名前付きでタプルにアクセスできる <span class="jinr-d--text-color d--marker1 d--bold"><code>collections</code></span> モジュールの <span class="jinr-d--text-color d--marker1 d--bold"><code>namedtuple</code></span> について解説しました。</p>



<p class="wp-block-paragraph">名前付きタプルは、タプルの各要素に名前でアクセスできるため、CSV ファイルの読み込みに使用したり、関数の戻り値で使用したりする際に便利です。各種メソッドも用意されており、この記事で代表的なメソッドを紹介しています。</p>



<p class="wp-block-paragraph"><code>namedtuple</code>は、辞書でキーにアクセスすることと似ていますが、<code>namedtuple</code> はタプルの 1 種のためイミュータブルで内部のメモリ使用効率が良くなります。また、<code>namedtuple</code> は添え字によるアクセスも可能で、この操作はアクセスが高速なため状況によって使い分けるといったこともできます。</p>



<p class="wp-block-paragraph">名前付きでアクセスできる <code>namedtuple</code> は便利な面が多いため、状況によって使用を検討してみてください。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox5 ">
			<i class="jif jin-ifont-v2speaker" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><code>namedtuple</code> の公式ドキュメントは<a href="https://docs.python.org/ja/3/library/collections.html#namedtuple-factory-function-for-tuples-with-named-fields" target="_blank" rel="noreferrer noopener">こちら</a>を参照してください。</p>
</div>
		</div></section>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/collections/namedtuple" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-collections-namedtuple/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Python】タプルの基本と使いどころ</title>
		<link>https://tech.nkhn37.net/python-tuple-basic/</link>
					<comments>https://tech.nkhn37.net/python-tuple-basic/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Fri, 29 Jan 2021 00:00:00 +0000</pubDate>
				<category><![CDATA[タプル（tuple）]]></category>
		<category><![CDATA[collections]]></category>
		<category><![CDATA[immutable]]></category>
		<category><![CDATA[namedtuple]]></category>
		<category><![CDATA[アンパック]]></category>
		<category><![CDATA[イミュータブル]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=549</guid>

					<description><![CDATA[Pythonのタプルの基本と使いどころについて解説します。 タプルの特徴と基本的な使い方 Pythonのタプル（tuple）とは、リストと同様で任意の要素を集めて列挙したシーケンスです。 この記事では、タプルの特徴や作成 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pythonの<span class="marker"><strong>タプルの基本と使いどころ</strong></span>について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold" id="タプル-tuple-の作成方法と特徴">タプルの特徴と基本的な使い方</h2>



<p class="wp-block-paragraph">Pythonの<span class="marker"><strong>タプル（<code>tuple</code>）</strong></span>とは、リストと同様で任意の要素を集めて列挙したシーケンスです。</p>



<p class="wp-block-paragraph">この記事では、タプルの特徴や作成方法など基本的な点について説明していきます。</p>



<h3 class="wp-block-heading jinr-heading d--bold" id="タプル-tuple-の特徴">タプル（<code>tuple</code>）の特徴</h3>



<p class="wp-block-paragraph">タプルは、リストに非常に似ていますが<span class="marker"><strong>イミュータブル（immutable）</strong></span>であるという点が異なっています。</p>



<p class="wp-block-paragraph">イミュータブル（immutable）は、<span class="marker"><strong>変更不可</strong></span>を意味します。一方で、リスト等のように値の変更が可能であることをミュータブル（mutable）と言います。</p>



<p class="wp-block-paragraph">この特徴のため、タプルは一度生成したら要素追加や値の変更といった変更操作ができません。一方で、リストであれば値を変更したり、<code>append</code>メソッドで要素を追加したりできます。</p>



<h3 class="wp-block-heading jinr-heading d--bold" id="タプル-tuple-の作成方法">タプル（<code>tuple</code>）の基本的な使い方</h3>



<h4 class="wp-block-heading jinr-heading d--bold">タプル作成と要素へのアクセス</h4>



<p class="wp-block-paragraph">タプル（<code>tuple</code>）の基本的な使い方を見ていきましょう。タプルを作成するには以下のように<code>()</code>で要素を順番に列挙します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># タプルの作成方法
tpl = ('A', 'B', 'C')
print(type(tpl))
print(f'tpl: {tpl}')
print(tpl[0], tpl[1], tpl[2])</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
&lt;class 'tuple'>
tpl: ('A', 'B', 'C')
A B C</pre>



<p class="wp-block-paragraph">タプルの各要素にアクセスするにはリストと同様に<code>[]</code>でアクセスできます。（位置は<code>0</code>から始まりますので注意しましょう）</p>



<h4 class="wp-block-heading jinr-heading d--bold">括弧なしでタプルを作成する</h4>



<p class="wp-block-paragraph">タプルは、以下のように括弧「<code>()</code>」なしで、「<code>,</code>」(カンマ)で要素を列挙するだけでも作成できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># ()がなくてもタプルとして作成される
tpl = 'A', 'B', 'C'
print(type(tpl))
print(f'tpl: {tpl}')</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
&lt;class 'tuple'>
tpl: ('A', 'B', 'C')</pre>



<p class="wp-block-paragraph">上記結果を見ると分かるようにタプルで作成されていることが分かると思います。括弧なしでもタプルと認識されますが、明示的に括弧を使用することが推奨されます。ここでは、<code>()</code>を用いなくてもタプルとして扱われるということを覚えておいてください。</p>



<h3 class="wp-block-heading jinr-heading d--bold" id="タプルのアンパック">タプルのアンパック</h3>



<h4 class="wp-block-heading jinr-heading d--bold">アンパックの基本的な考え方</h4>



<p class="wp-block-paragraph">タプルの要素は、以下例のように異なる変数に簡単に代入することができます。このような方法を<span class="marker"><strong>タプルのアンパック（またはアンパック代入）</strong></span>と言います。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># タプルのアンパック
tpl = ('A', 'B', 'C')
a, b, c = tpl
print(f'a = {a}, b = {b}, c = {c}')</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
a = A, b = B, c = C</pre>



<h4 class="wp-block-heading jinr-heading d--bold">変数を列挙した定義はタプルのアンパック</h4>



<p class="wp-block-paragraph">Pythonを勉強を始めると、以下のように変数を列挙して値を代入できることを知ります。実は、これはタプルのアンパックをしています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">a, b, c = 'A', 'B', 'C'
print(f'a = {a}, b = {b}, c = {c}')</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
a = A, b = B, c = C</pre>



<p class="wp-block-paragraph">上記例において「<code>a, b, c = 'A', 'B', 'C'</code>」の右側はタプルとなっています。上記で<code>()</code>がなくてもタプルとして生成されるということを紹介したことを思い出してください。つまり、このコードの実態としては、タプルが生成されて、アンパックされたうえで各変数に代入されているという動きとなっています。</p>



<h4 class="wp-block-heading jinr-heading d--bold">アンパックを利用した値の交換</h4>



<p class="wp-block-paragraph">タプルのアンパックを使うと、以下のように要素の交換を簡単に実施できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">data1 = "A"
data2 = "B"
print(
    f"data1: {data1}, id(data1): {id(data1)}, "
    f"data2: {data2}, id(data2): {id(data2)}"
)

# 要素の交換
data1, data2 = data2, data1
print(
    f"data1: {data1}, id(data1): {id(data1)}, "
    f"data2: {data2}, id(data2): {id(data2)}"
)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
data1: A, id(data1): 1234656225968, data2: B, id(data2): 1234655913072
data1: B, id(data1): 1234655913072, data2: A, id(data2): 1234656225968</pre>



<p class="wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">※ 上記例のid値の部分は実行ごとに変わりますのでご注意ください。</mark></p>



<p class="wp-block-paragraph">上記結果では、値と<code>id</code>を表示していますが、<code>data1</code>と<code>data2</code>の内容がしっかりと交換できていることが分かります。</p>



<h2 class="wp-block-heading jinr-heading d--bold" id="タプルの使いどころ">タプルの使いどころ</h2>



<h3 class="wp-block-heading jinr-heading d--bold">値が変更されたくないときに利用する</h3>



<p class="wp-block-paragraph">タプルがリストと違って特徴的なところは、<span class="marker"><strong>イミュータブル（immutable）</strong></span>であることです。</p>



<p class="wp-block-paragraph">この特徴から、<span class="marker"><strong>プログラム上で変更されたくない項目を管理する場合</strong></span>にタプルを使用することがおすすめされます。例えば以下のようなケースが考えられます。</p>



<ul class="wp-block-list jinr-list">
<li>関数の戻り値：関数が複数の値を返却する際に、タプルでまとめるのは便利です。例えば、座標<code>(x, y)</code>のペアや複数の計算結果を返すときなどが該当します。</li>



<li>変更されるべきではない値の管理：日付や設定値のように変更する必要がないデータをタプルで保持することで誤った変更を防ぐことができます。</li>



<li>キーとしての使用：タプルはハッシュ可能であるため、辞書のキーとして使用できます。例えば、座標<code>(x, y)</code>に対応する値を管理する辞書などが典型的な例です。</li>
</ul>



<h3 class="wp-block-heading jinr-heading d--bold">名前付きタプル（<code>namedtuple</code>）</h3>



<p class="wp-block-paragraph">上記で紹介したようにタプルは関数の戻り値で複数項目を返却する場合に便利です。しかし、どの要素に何が入っているのかが分かりにくいという欠点もあります。</p>



<p class="wp-block-paragraph">そのような際には、<span class="marker"><strong><code>collections</code></strong></span>モジュールの<span class="marker"><strong>名前付きタプル（<code>namedtuple</code>）</strong></span>の使用を検討してみてください。<code>namedtuple</code>は、項目に名前を付けることでアクセスが容易になります。</p>



<p class="wp-block-paragraph"><code>namedtuple</code>については「<a href="https://tech.nkhn37.net/python-collections-namedtuple/" target="_blank" rel="noreferrer noopener">namedtupleで名前付きタプルを使用する</a>」を参考にしてください。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">Pythonの<span class="marker"><strong>タプル（<code>tuple</code>）の基本と使いどころ</strong></span>について解説しました。</p>



<p class="wp-block-paragraph">タプルは、イミュータブル（immutable）で変更不可能であるというのが特徴です。この記事では、タプルの基本的な作成方法やアンパックの考え方を紹介しました。</p>



<p class="wp-block-paragraph">タプルは、変更不可であることが特徴です。この特徴からプログラム実行中に変更されたくないような設定値等に使うことが便利です。</p>



<p class="wp-block-paragraph">タプルは、リストや辞書などと同様にPythonプログラミングにおける代表的なものですので、特徴をしっかりと理解して使いこなせるようになってもらいたいと思います。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-basic/tuple" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-tuple-basic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-07-25 05:11:06 by W3 Total Cache
-->