tuple【タプル型】3.5

メモ


例 (メモ)

# 要素数
tpl = (1, 2, 3, 4, 5)
print(len(tpl))  # 出力:5
# 重複
tpl = (1, 1, 1, 1, 1)
print(len(tpl))  # 出力:5

# 入れ子
tpl = (1, 2, (31, 32, 33), 4, 5)
print(len(tpl))     # 出力:5
print(len(tpl[2]))  # 出力:3
# 要素の型
tpl = (1, 2.0, "3", True, [1, 2, 3], (1, 2, 3))
print(len(tpl))     # 出力:6
print(len(tpl[4]))  # 出力:3
print(len(tpl[5]))  # 出力:3
# 構造体の代替
ID = 0
NAME = 1
ADDRESS = 2

tpl1 = (1, "Yamada Taro", "Tokyo")
tpl2 = (2, "Tanaka Hanako", "Osaka")
print(tpl1[ID])       # 出力:1
print(tpl1[NAME])     # 出力:Yamada Taro
print(tpl1[ADDRESS])  # 出力:Tokyo
print(tpl2[ID])       # 出力:2
print(tpl2[NAME])     # 出力:Tanaka Hanako
print(tpl2[ADDRESS])  # 出力:Osaka

lst = [tpl1, tpl2]
for item in lst:
    print(F"Id={item[ID]} Name='{item[NAME]}' Address='{item[ADDRESS]}'")
# 出力:Id=1 Name='Yamada Taro' Address='Tokyo'
# 出力:Id=2 Name='Tanaka Hanako' Address='Osaka'

例 (繰り返し処理)

tpl = ('a', 'b', 'c')
for item in tpl:
    print(item)
# 出力:a
# 出力:b
# 出力:c
tpl = ('a', 'b', 'c')
for index, item in enumerate(tpl):
    print(index, item)
# 出力:0 a
# 出力:1 b
# 出力:2 c
tpl1 = ('a', 'b', 'c')
tpl2 = ('A', 'B', 'C', 'D')
for item1, item2 in zip(tpl1, tpl2):
    print(item1 + item2)
# 出力:aA
# 出力:bB
# 出力:cC
tpl1 = ('a', 'b', 'c')
tpl2 = ('A', 'B', 'C', 'D')
len1 = len(tpl1)
len2 = len(tpl2)
length = max(len1, len2)
for i in range(length):
    if len1 <= i:
        x = "-"
    else:
        x = tpl1[i]
    if len2 <= i:
        y = "-"
    else:
        y = tpl2[i]
    print(i, x + y)
# 出力:0 aA
# 出力:1 bB
# 出力:2 cC
# 出力:3 -D
tpl = ('a', 'b', 'c')
for item in reversed(tpl):
    print(item)
# 出力:c
# 出力:b
# 出力:a
tpl = ('a', 'c', 'b')
for item in sorted(tpl):
    print(item)
# 出力:a
# 出力:b
# 出力:c

例 (パック・アンパック)

# パック
def func(x):
    return x, x*2, x*3

tpl = func(2)
print(tpl)      # 出力:(2, 4, 6)
(x, y, z) = func(2)
print(x, y, z)  # 出力:2 4 6
x, y, z = func(3)
print(x, y, z)  # 出力:3 6 9

tpl = 1,
print(tpl)      # 出力:(1,)
tpl = 1, 2
print(tpl)      # 出力:(1, 2)
x, y = 1, 2
print(x, y)     # 出力:1 2
# アンパック:複数変数に代入(右辺)
(x, y, z) = (1, 3, 5)
print(x, y, z)  # 出力:1 3 5
x, y, z = (2, 4, 6)
print(x, y, z)  # 出力:2 4 6
# アンパック:複数変数に代入(左辺) 
tpl = (10, 20)

x, y = tpl
print(x, y)  # 出力:10 20

#x, = tpl       # ValueError 例外
#x, y, z = tpl  # ValueError 例外

tpl = (1, 2, 3, 4)

*x, y, z = tpl
print(x, y, z)  # 出力:[1, 2] 3 4
x, *y, z = tpl
print(x, y, z)  # 出力:1 [2, 3] 4
x, y, *z = tpl
print(x, y, z)  # 出力:1 2 [3, 4]
*x, y = tpl
print(x, y)     # 出力:[1, 2, 3] 4
x, *y = tpl
print(x, y)     # 出力:1 [2, 3, 4]
*x, = tpl
print(x)        # 出力:[1, 2, 3, 4]
*x1, x2, x3, x4, x5 = tpl
print(x1, x2, x3, x4, x5)  # 出力:[] 1 2 3 4

x, y, z, _ = tpl
print(x, y, z)  # 出力:1 2 3
x, *_, z = tpl
print(x, z)     # 出力:1 4
x, *_ = tpl
print(x)        # 出力:1
# アンパック:シーケンス等のリテラル要素
tpl0 = (21, 22, 23)

lst = [1, tpl0, 3]
print(lst)  # 出力[1, (21, 22, 23), 3]:
lst = [1, *tpl0, 3]
print(lst)  # 出力:[1, 21, 22, 23, 3]

tpl = (1, tpl0, 3)
print(tpl)  # 出力:(1, (21, 22, 23), 3)
tpl = (1, *tpl0, 3)
print(tpl)  # 出力:(1, 21, 22, 23, 3)
# アンパック:シーケンス等のリテラル要素
tpl = (10, -20, 30)

#print(max(1, tpl, 3))  # TypeError 例外
print(max(1, *tpl, 3))  # 出力:30

#print(min(1, tpl, 3))  # TypeError 例外
print(min(1, *tpl, 3))  # # 出力:-20

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

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)