tuple【タプル型】

メモ

  • タプル型
    • イミュータブル(変更不可) なシーケンス
      (ミュータブルなシーケンス:list【リスト型】)
    • list【リスト型】で可能な内包表記 は不可 (ジェネレータ式となる)
      (リスト内包表記をコンストラクタに指定すれば同等な生成可能)
    • 要素数:組み込み関数の len()【長さ・要素数】
    • 入れ子可能
    • 各要素の型は違っても可
    • C系言語の構造体の代替 (名前ではなくインデックスでアクセス)
    • 重複可
    • リテラルの末尾カンマは無視
    • 変更不可の為、辞書のキーとして使用可
  • 繰り返し処理 (for-in【for ループ】 で処理)〔
    • そのまま指定し、要素を取得して処理
    • enumerate()【番号付け】を使用し、インデックスと要素を取得して処理
    • zip()【組分け】を使用し、複数のシーケンス型の要素を取得し処理 (一度に最小要素数分処理)
    • range【レンジ型】を使用し、要素をインデックスで取得し処理 (複数のシーケンス型を一度に最大要素数分処理 等)
    • reversed()【逆順】を使用し、逆順に要素を取得して処理
    • sorted()【ソート】を使用し、ソート順に要素を取得して処理
  • パックアンパック
    • 丸カッコ無しのカンマ区切りの要素はタプルにパック (リテラル・コンストラクタ 参照)
    • 同数の要素変数のタプルにアンパックして代入 3.0
      (要素数が違う場合は ValueError 例外、 但し前にアスタリスク指定の変数には過分要素が list【リスト型】で代入)
      複数同時代入の左辺 (例:x, y = 1, 2)
      関数の複数戻り値の取得
    • 前にアスタリスクを指定してその場でアンパック 3.5
      シーケンス等のリテラルで個別要素に展開
      関数の引数で個別要素に展開
  • メソッド 一覧
    メソッド関連
    コンストラクタリテラル
    count()【要素出現回数】
    index()【要素インデックス】
  • 共通 シーケンス演算  (共通のシーケンス演算) 〔
    該当タプルの変更なし ()
    【指定値】
    ij<0
    ij が省略 または None
    ij が範囲外
    【特記なしの動作】
    末尾からのインデックス ( len(tuple) + i・j :末尾が -1 )
    先頭 または 末尾 (k の正負により範囲が広がる位置)
    先頭 または 末尾 (近いほう)
    演算備考
    x in tuple タプル tuple のある要素が x と等しければ True 、等しくなければ False
    x not in tuple タプル tuple のある要素が x と等しければ False 、等しくなければ True
    tuple1 + tuple2タプル tuple1 と タプル tuple2 の結合
    tuple * n
    n * tuple
    タプル tuplen(整数) 回結合 (n<0:空のタプル)
    注:参照のコピー
    tuple[i ] タプル tuplei 番目の要素
    範囲外:IndexError 例外
    tuple[[i] :[j]] タプル tupleij(含まない) 番目までの要素
    tuple[[i] :[j] :[k]] タプル tupleij(含まない) 番目までの k(省略:1) 番目 毎の要素
    0<k:先頭から末尾方向
    k<0:末尾から先頭方向・i は末尾側を指定 (範囲補正なし)
    k=0:不可 (ValueError 例外)
    len(tuple)タプル tuple の要素数
    max(tuple)タプル tuple の最大要素
    min(tuple)タプル tuple の最小要素
    tuple.index(x  [, i [, j  ]]) タプル tuple 中で 要素 xij(含まない) の間で 最初に出現する位置インデックス
    未検出:ValueError 例外
    tuple.count(x) タプル tuple 中に 要素 x が出現する回数
  • 関連

例 (繰り返し処理)

tpl = (0, 1, 2, 3)
for item in tpl:
    print(item)
# 出力:0
# 出力:1
# 出力:2
# 出力:3

tpl1 = (0, 10, 20, 30)
tpl2 = (-4, -3, -2, -1)
for i in range(len(tpl1)):
    x = tpl1[i]
    y = tpl2[i]
    z = x * y
    print(i, x, y, z)
# 出力:0 0 -4 0
# 出力:1 10 -3 -30
# 出力:2 20 -2 -40
# 出力:3 30 -1 -30

例 (共通 シーケンス演算)

tpl = (1, 2, 3)

# x in tuple
print(1 in tpl)  # 出力:True
print(4 in tpl)  # 出力:False

# x not in tuple
tpl = (1, 2, 3)
print(1 not in tpl)  # 出力:False
print(4 not in tpl)  # 出力:True
# tuple1 + tuple2
tpl1 = (1, 2, 3)
tpl2 = (4, 5, 6)
tpl3 = tpl1 + tpl2
print(tpl3)       # 出力:(1, 2, 3, 4, 5, 6)
print(tpl1 + ())  # 出力:(1, 2, 3)
print(() + tpl1)  # 出力:(1, 2, 3)
# tuple*n
# n*tuple
tpl = (1, 2, 3)
tpl1 = tpl * 3
print(tpl1)  # 出力:(1, 2, 3, 1, 2, 3, 1, 2, 3)

tpl2 = 3 * tpl
print(tpl2)  # 出力:(1, 2, 3, 1, 2, 3, 1, 2, 3)

tpl3 = tpl * (-3)
print(tpl3)  # 出力:()

tpl4 = ([],) * 3
print(tpl4)  # 出力:([], [], [])
tpl4[0].append(9)
print(tpl4)  # 出力:([9], [9], [9])

lst = [11, 12]
tpl = (0, lst)
tpl5 = tpl * 3
print(tpl5)  # 出力:(0, [11, 12], 0, [11, 12], 0, [11, 12])
tpl5[1].append(9)
print(tpl5)  # 出力:(0, [11, 12, 9], 0, [11, 12, 9], 0, [11, 12, 9])
print(lst)   # 出力:[11, 12, 9]
# tuple(i)
tpl = (0, 1, 2, 3, 4, 5, 6)
print(tpl[3])   # 出力:3
print(tpl[-2])  # 出力:5
#print(tpl[99])  # IndexError 例外
#print(tpl[-99]) # IndexError 例外
# tuple(i:j)
tpl = (0, 1, 2, 3, 4, 5, 6)
print(tpl[2:4])    # 出力:(2, 3)
print(tpl[2:-3])   # 出力:(2, 3)
print(tpl[-5:-3])  # 出力:(2, 3)
print(tpl[:4])     # 出力:(0, 1, 2, 3)
print(tpl[2:])     # 出力:(2, 3, 4, 5, 6)
print(tpl[:])      # 出力:(0, 1, 2, 3, 4, 5, 6)
print(tpl[-99:4])  # 出力:(0, 1, 2, 3)
print(tpl[2:99])   # 出力:(2, 3, 4, 5, 6)
print(tpl[-99:99]) # 出力:(0, 1, 2, 3, 4, 5, 6)
# tuple(i:j:k)
tpl = (0, 1, 2, 3, 4, 5, 6)
print(tpl[1:6:2])    # 出力:(1, 3, 5)
print(tpl[1:-1:2])   # 出力:(1, 3, 5)
print(tpl[-6:-1:2])  # 出力:(1, 3, 5)
print(tpl[-99:99:2]) # 出力:(0, 2, 4, 6)
print(tpl[5:1:-2])   # 出力:(5, 3)
print(tpl[-2:1:-2])  # 出力:(5, 3)
print(tpl[-2:-6:-2]) # 出力:(5, 3)
print(tpl[1:5:-2])   # 出力:()
#print(tpl[5:1:0])    # ValueError 例外
print(tpl[:6:2])  # 出力:(0, 2, 4)
print(tpl[1::2])  # 出力:(1, 3, 5)
print(tpl[1:6:])  # 出力:(1, 2, 3, 4, 5)
print(tpl[::2])   # 出力:(0, 2, 4, 6)
print(tpl[1::])   # 出力:(1, 2, 3, 4, 5, 6)
print(tpl[::])    # 出力:(0, 1, 2, 3, 4, 5, 6)
# len(tuple)
tpl = (1, 2, 3, 4)
print(len(tpl))  # 出力:4
print(len(()))   # 出力:0
tpl = (1, -2, 3, -4)

# min(tuple)
print(min(tpl))  # 出力:-4
# max(tuple)
print(max(tpl))  # 出力:3
# tuple.index(x(,i(,j)))
tpl = (0, 1, 2, 3, 4, 3, 2, 1, 0)
print(tpl.index(1))
# 出力:1
print(tpl.index(1, 2))
# 出力:7
print(tpl.index(1, 2, 8))
# 出力:7
#print(tpl.index(1, 2, 7))  # ValueError 例外
print(tpl.index(1, -99))
# 出力:1
print(tpl.index(1, 2, 99))
# 出力:7
print(tpl.index(1, -99, 99))
# 出力:1
# tuple.count(x)
tpl = (1, 2, 3, 2, 1)
print(tpl.count(1))  # 出力:2
print(tpl.count(3))  # 出力:1
print(tpl.count(0))  # 出力:0

リテラル・コンストラクタ

構文

()
(item1,)
(item1, ...itemN[,])
item1,
item1, ...itemN[,]

class tuple( [iterable] )

itemN要素項目
iterable元になるイテラブルオブジェクト (シーケンス・イテレートサポートのコンテナ・イテレータオブジェクト)
※:リテラルの末尾カンマは無視 (空要素にはならない)

# リテラル
tpl = ()
print(tpl)  # 出力:()
tpl = (1)
print(tpl)  # 出力:1 【数値】
tpl = (1,)
print(tpl)  # 出力:(1,)
tpl = (1, 2, 3)
print(tpl)  # 出力:(1, 2, 3)

tpl = 1,
print(tpl)  # 出力:(1)
tpl = 1, 2, 3
print(tpl)  # 出力:(1, 2, 3)

tpl = (1, (21, 22), (31, (321, 322)))
print(tpl)
# 出力:(1, (21, 22), (31, (321, 322)))

tpl = (1, '2', 3.0)
print(tpl)
# 出力:(1, '2', 3.0)

tpl = (1, 1, 1)
print(tpl)
# 出力:(1, 1, 1)
# コンストラクタ
tpl = tuple()
print(tpl)
# 出力:()
tpl = tuple((1, 3, 5))
print(tpl)
# 出力:(1, 3, 5)
tpl = tuple((2, 4, 6))
print(tpl)
# 出力:(2, 4, 6)
tpl = tuple("abc")
print(tpl)
# 出力:('a', 'b', 'c')
# リスト内包表記の使用
dummy = (x for x in range(5))  # ジェネレータ式
print(type(dummy))  # 出力:<class 'generator'>

tpl = tuple([x for x in range(5)])
print(tpl)  # 出力:(0, 1, 2, 3, 4)
tpl = tuple([x * 3 for x in range(5)])
print(tpl)  # 出力:(0, 3, 6, 9, 12)
tpl = tuple([x for x in range(10) if x % 2 == 0])
print(tpl)  # 出力:(0, 2, 4, 6, 8)
tpl = tuple([x * 3 for x in range(10) if x % 2 == 0])
print(tpl)  # 出力:(0, 6, 12, 18, 24)