Python3でタプルを理解する
序章
タプルは、不変または不変の順序付けられた要素のシーケンスであるデータ構造です。 タプルは不変であるため、それらの値を変更することはできません。 以下は、4つの要素で構成されるタプルの例です。
Example Tuplecoral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
タプルはデータのグループ化に使用されます。 タプル内にある各要素または値は、アイテムと呼ばれます。
タプルの値は、括弧(
)
の間にコンマ,
で区切られています。 空のタプルはcoral = ()
として表示されますが、値が1つでもあるタプルは、coral = ('blue coral',)
のようにコンマを使用する必要があります。
上記のタプルをprint()
すると、次の出力が返されますが、タプルはまだ括弧で囲まれています。
print(coral)
Output('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
コレクションの種類であるPythonタプルやその他のデータ構造について考えるときは、コンピューターにあるさまざまなコレクション(ファイルの品揃え、曲のプレイリスト、ブラウザーのブックマーク、電子メール、ビデオのコレクション)をすべて考慮すると便利です。ストリーミングサービスなどにアクセスできます。
タプルはlistsに似ていますが、値を変更することはできません。 このため、コードでタプルを使用すると、その値のシーケンスに変更を加えるつもりはないことを他の人に伝えていることになります。 さらに、値は変更されないため、Pythonでタプルを使用してコードを最適化できます。これは、コードがリストよりもタプルの方がわずかに高速になるためです。
前提条件
Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)
タプルのインデックス作成
要素の順序付けられたシーケンスとして、タプル内の各アイテムは、インデックス付けによって個別に呼び出すことができます。
各項目は、インデックス番号0
から始まる整数値のインデックス番号に対応しています。
情報:このチュートリアルのサンプルコードに従うには、python3
コマンドを実行して、ローカルシステムでPythonインタラクティブシェルを開きます。 次に、>>>
プロンプトの後に例を追加して、例をコピー、貼り付け、または編集できます。
このチュートリアルの冒頭にあるcoral
タプルの例では、インデックスの内訳は次のようになります。
「ブルーコーラル」 | 「シカツノサンゴ」 | 「柱珊瑚」 | 「エルクホーンコーラル」 |
---|---|---|---|
0 | 1 | 2 | 3 |
最初の項目である文字列'blue coral'
はインデックス0
で始まり、リストはインデックス3
で項目'elkhorn coral'
で終わります。
Pythonタプルの各アイテムには対応するインデックス番号があるため、アイテムにアクセスできます。
これで、インデックス番号を参照して、タプルの個別のアイテムを呼び出すことができます。
print(coral[2])
Outputpillar coral
このタプルのインデックス番号は、上の表に示すように、0
から3
の範囲です。 したがって、アイテムのいずれかを個別に呼び出すには、次のようなインデックス番号を参照します。
coral[0] = 'blue coral' coral[1] = 'staghorn coral' coral[2] = 'pillar coral' coral[3] = 'elkhorn coral'
3
より大きいインデックス番号を持つタプルcoral
を呼び出すと、有効ではなくなるため、範囲外になります。
print(coral[22])
OutputIndexError: tuple index out of range
正のインデックス番号に加えて、-1
から開始してタプルの末尾から逆方向にカウントすることにより、負のインデックス番号を持つタプルのアイテムにアクセスすることもできます。 これは、タプルが長く、タプルの終わりに向かってアイテムを特定したい場合に特に便利です。
同じタプルcoral
の場合、負のインデックスの内訳は次のようになります。
「ブルーコーラル」 | 「シカツノサンゴ」 | 「柱珊瑚」 | 「エルクホーンコーラル」 |
---|---|---|---|
-4 | -3 | -2 | -1 |
したがって、アイテム'blue coral'
の負のインデックス番号を使用して印刷する場合は、次のように実行できます。
print(coral[-4])
Outputblue coral
+
演算子を使用して、タプル内の文字列アイテムを他の文字列と連結できます。
print('This reef is made up of ' + coral[1])
OutputThis reef is made up of staghorn coral
インデックス番号0
の文字列アイテムを文字列'This reef is made up of '
と連結することができました。 +
演算子を使用して、2つ以上のタプルを連結することもできます。
タプル内のアイテムに対応するインデックス番号を使用して、タプルの各アイテムに個別にアクセスできます。
タプルのスライス
インデックスを使用して、タプルからいくつかのアイテムを呼び出すことができます。 スライスを使用すると、コロン[x:y]
で区切られたインデックス番号の範囲を作成することにより、複数の値を呼び出すことができます。
coral
の真ん中のアイテムだけを印刷したい場合、スライスを作成することで印刷できます。
print(coral[1:3])
Output('staghorn coral', 'pillar coral')
[1:3]
のようにスライスを作成する場合、最初のインデックス番号はスライスの開始位置(包括的)であり、2番目のインデックス番号はスライスの終了位置(排他的)です。これが、上記の例の項目の理由です。位置では、1
と2
が印刷されるアイテムです。
リストのいずれかの端を含める場合は、tuple[x:y]
構文の数値の1つを省略できます。 たとえば、タプルcoral
の最初の3つのアイテム('blue coral'
、'staghorn coral'
、'pillar coral'
)を印刷する場合は、これを行うことができます。次のように入力します。
print(coral[:3])
Output('blue coral', 'staghorn coral', 'pillar coral')
これにより、タプルの先頭が印刷され、インデックス3
の直前で停止しました。
タプルの最後にすべての項目を含めるには、構文を逆にします。
print(coral[1:])
Output('staghorn coral', 'pillar coral', 'elkhorn coral')
タプルをスライスするときに、正のインデックス番号と同様に、負のインデックス番号を使用することもできます。
print(coral[-3:-1]) print(coral[-2:])
Output('staghorn coral', 'pillar coral') ('pillar coral', 'elkhorn coral')
スライスで使用できる最後のパラメーターの1つは、 stride と呼ばれます。これは、最初のアイテムがタプルから取得された後に前方に移動するアイテムの数を示します。
これまでのところ、ストライドパラメータを省略しており、Pythonのデフォルトはストライド1であるため、2つのインデックス番号の間のすべてのアイテムが取得されます。
この構造の構文はtuple[x:y:z]
で、z
はストライドを指します。 より大きなリストを作成し、それをスライスして、ストライドに2の値を与えましょう。
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) print(numbers[1:11:2])
Output(1, 3, 5, 7, 9)
私たちの構造numbers[1:11:2]
は、1
を含むインデックス番号と11
を含まないインデックス番号の間の値を出力し、2
のストライド値はプログラムにのみ出力するように指示します他のすべてのアイテム。
最初の2つのパラメーターを省略して、構文tuple[::z]
のパラメーターとしてストライドのみを使用できます。
print(numbers[::3])
Output(0, 3, 6, 9, 12)
ストライドを3
に設定してタプルnumbers
を印刷すると、3つおきのアイテムのみが印刷されます。
0 、1、2、 3 、4、5、 6 、7、8、 9 、10、11、[X74X ] 12
正と負の両方のインデックス番号を持つタプルをスライスし、ストライドを示すことで、達成しようとしている出力を受け取るためのコントロールが提供されます。
タプルの連結と乗算
Operators は、タプルを連結または乗算するために使用できます。 連結は+
演算子で行われ、乗算は*
演算子で行われます。
+
演算子を使用して、2つ以上のタプルを連結できます。 2つの既存のタプルの値を新しいタプルに割り当てることができます。
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis') coral_kelp = (coral + kelp) print(coral_kelp)
Output('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
+
演算子は連結できるため、既存のタプルを変更することはできませんが、タプルを組み合わせて新しいタプルを形成するために使用できます。
*
演算子を使用して、タプルを乗算できます。 おそらく、ディレクトリ内のすべてのファイルのコピーをサーバーに作成するか、プレイリストを友達と共有する必要があります。この場合、データのコレクションを増やす必要があります。
coral
タプルに2を掛け、kelp
タプルに3を掛けて、それらを新しいタプルに割り当てましょう。
multiplied_coral = coral * 2 multiplied_kelp = kelp * 3 print(multiplied_coral) print(multiplied_kelp)
Output('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
*
演算子を使用すると、指定した回数だけタプルを複製し、元のデータシーケンスに基づいて新しいタプルを作成できます。
+
および*
演算子を使用して、既存のタプルを連結または乗算して、新しいタプルを形成できます。
タプル関数
タプルの操作に使用できる組み込み関数がいくつかあります。 それらのいくつかを見てみましょう。
len()
文字列やリストと同様に、len()
を使用してタプルの長さを計算できます。ここで、次のようにタプルをパラメーターとして渡します。
len(coral)
この関数は、たとえば、最小または最大のコレクション長を適用する必要がある場合、またはシーケンスされたデータを比較する場合に役立ちます。
タプルkelp
およびnumbers
の長さを印刷すると、次の出力が返されます。
print(len(kelp)) print(len(numbers))
Output4 13
タプルkelp
には4つのアイテムがあるため、上記の出力を受け取ります。
kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
また、タプルnumbers
には13個のアイテムがあります。
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
これらの例には比較的少ないアイテムがありますが、len()
関数は、大きなタプルに含まれるアイテムの数を確認する機会を提供します。
max()およびmin()
数値項目(integersおよびfloatsを含む)で構成されるタプルを操作する場合、max()
およびmin()
関数を使用して最高値を見つけることができますそれぞれのタプルに含まれる最小値。
これらの関数を使用すると、テストスコア、温度、価格などの定量データに関する情報を見つけることができます。
フロートで構成されるタプルを見てみましょう。
more_numbers = (11.13, 34.87, 95.59, 82.49, 42.73, 11.12, 95.57)
max()
を取得するには、max(more_numbers)
のように、タプルを関数に渡します。 これをprint()
関数と組み合わせて、結果を出力できるようにします。
print(max(more_numbers))
Output95.59
max()
関数は、タプルの中で最も高い値を返しました。
同様に、min()
関数を使用できます。
print(min(more_numbers))
Output11.12
ここでは、最小のフロートがタプルで見つかり、印刷されました。
len()
関数と同様に、max()
およびmin()
関数は、多くの値を含むタプルを操作するときに非常に役立ちます。
タプルとリストの違い
タプルがリストと異なる主な方法は、タプルを変更できないことです。 つまり、アイテムをタプルに追加したり、タプルから削除したり、タプル内でアイテムを置き換えたりすることはできません。
ただし、2つ以上のタプルを連結して、新しいタプルを形成することはできます。
coral
タプルについて考えてみましょう。
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
アイテム'blue coral'
を'black coral'
という別のアイテムに置き換えたいとします。 リストの場合と同じように、次のように入力して、その出力を変更しようとすると、次のようになります。
coral[0] = 'black coral'
出力としてエラーが表示されます。
OutputTypeError: 'tuple' object does not support item assignment
これは、タプルを変更できないためです。
タプルを作成し、本当に必要なのがリストであると判断した場合、それをリストに変換できます。 タプルをリストに変換するには、list()
を使用します。
list(coral)
そして今、私たちのcoral
データ型はリストになります:
coral = ['blue coral', 'staghorn coral', 'pillar coral']
括弧が角括弧に変更されたため、タプルがリストに変換されたことがわかります。
同様に、tuple()
を使用してリストをタプルに変換できます。
データ型変換の詳細については、「 Python3でデータ型を変換する方法」を参照してください。
結論
タプルデータ型はシーケンスされたデータ型であり、変更できません。Pythonが処理するリストよりもいくらか高速な型であるため、プログラムに最適化を提供します。 他の人があなたのコードであなたと協力するとき、あなたのタプルの使用はあなたがそれらの値のシーケンスが変更されることを意図していないことを彼らに伝えます。
このチュートリアルでは、タプルのインデックス作成、スライス、連結、使用可能な組み込み関数の表示など、タプルの基本機能について説明しました。