Python Language
タプル
サーチ…
前書き
タプルは値の不変のリストです。タプルは、Pythonの最も単純で最も一般的なコレクション型の1つで、カンマ演算子( value = 1, 2, 3
)で作成できます。
構文
(1、a、 "hello")#aは変数でなければならない
()#空のタプル
(1、)#1要素タプル。
(1)
はタプルではありません。1、2、3#3要素タプル(1,2,3)
備考
カッコは、空のタプルまたは関数呼び出しで使用する場合にのみ必要です。
タプルは一連の値です。値は任意の型にすることができ、それらは整数でインデックス付けされるので、タプルはリストのようなものです。重要な違いは、タプルは不変でハッシュ可能であるため、セットとマップで使用できることです
タプルの索引付け
x = (1, 2, 3)
x[0] # 1
x[1] # 2
x[2] # 3
x[3] # IndexError: tuple index out of range
負の数を持つインデックスは、最後の要素から-1として開始します。
x[-1] # 3
x[-2] # 2
x[-3] # 1
x[-4] # IndexError: tuple index out of range
要素の範囲を索引付けする
print(x[:-1]) # (1, 2)
print(x[-1:]) # (3,)
print(x[1:3]) # (2, 3)
タプルは不変です
Pythonのlist
とtuple
の主な違いの1つは、タプルが不変であることです。つまり、タプルが初期化された後にアイテムを追加または変更することはできません。例えば:
>>> t = (1, 4, 9)
>>> t[0] = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
同様に、タプルはありません.append
と.extend
ような方法をlist
ありません。 +=
を使うことは可能ですが、タプル自体ではなく変数のバインディングを変更します:
>>> t = (1, 2)
>>> q = t
>>> t += (3, 4)
>>> t
(1, 2, 3, 4)
>>> q
(1, 2)
タプル内にlists
などの可変オブジェクトを配置するときは注意してください。これは、それらを変更するときに非常に混乱する結果につながる可能性があります。例えば:
>>> t = (1, 2, 3, [1, 2, 3])
(1, 2, 3, [1, 2, 3])
>>> t[3] += [4, 5]
両方ともエラーを起こし、タプル内のリストの内容を変更します:
TypeError: 'tuple' object does not support item assignment
>>> t
(1, 2, 3, [1, 2, 3, 4, 5])
+=
演算子を使用してタプルに「追加」することができます。これは、追加した新しい要素で新しいタプルを作成し、それを現在の変数に割り当てることによって機能します。古いタプルは変更されませんが、置き換えられます!
これはリストとの変換を避けますが、これは遅く、特に複数回追加する場合は悪い習慣です。
タプルは要素的にハッシュ可能であり、等しい
hash( (1, 2) ) # ok
hash( ([], {"hello"}) # not ok, since lists and sets are not hashabe
したがって、タプルは、その要素のそれぞれができる場合にのみ、 set
中に入れたり、またはdict
としてキーとして入れることができます。
{ (1, 2) } # ok
{ ([], {"hello"}) ) # not ok
タプル
構文上、タプルはコンマで区切られた値のリストです。
t = 'a', 'b', 'c', 'd', 'e'
必要ではありませんが、タプルをかっこで囲むのが一般的です。
t = ('a', 'b', 'c', 'd', 'e')
カッコで空のタプルを作成する:
t0 = ()
type(t0) # <type 'tuple'>
単一の要素を持つタプルを作成するには、最後のカンマを含める必要があります。
t1 = 'a',
type(t1) # <type 'tuple'>
カッコ内の単一の値はタプルではないことに注意してください。
t2 = ('a')
type(t2) # <type 'str'>
シングルトンタプルを作成するには、末尾にカンマが必要です。
t2 = ('a',)
type(t2) # <type 'tuple'>
シングルトンタプルの場合は、カッコを使用することをお勧めします( 末尾のカンマのPEP8を参照)。また、末尾のコンマの後に空白がない場合 ( 空白の場合はPEP8を参照)
t2 = ('a',) # PEP8-compliant
t2 = 'a', # this notation is not recommended by PEP8
t2 = ('a', ) # this notation is not recommended by PEP8
タプルを作成する別の方法は組み込み関数tuple
です。
t = tuple('lupins')
print(t) # ('l', 'u', 'p', 'i', 'n', 's')
t = tuple(range(3))
print(t) # (0, 1, 2)
これらの例は、Allen B.Dayeyの「 Think Python 」の資料に基づいています。
タプルのパッキングとアンパック
Pythonのタプルはコンマで区切られた値です。タプルを入力するための囲み括弧はオプションであるため、2つの代入
a = 1, 2, 3 # a is the tuple (1, 2, 3)
そして
a = (1, 2, 3) # a is the tuple (1, 2, 3)
同等です。代入a = 1, 2, 3
は、タプルで値をまとめるため、 パッキングとも呼ばれます。
1値のタプルもタプルであることに注意してください。変数が単一の値ではなくタプルであることをPythonに伝えるために、末尾のコンマ
a = 1 # a is the value 1
a = 1, # a is the tuple (1,)
カッコを使用する場合はカンマも必要です
a = (1,) # a is the tuple (1,)
a = (1) # a is the value 1 and not a tuple
タプルから値をアンパックし、複数の代入を行うには
# unpacking AKA multiple assignment
x, y, z = (1, 2, 3)
# x == 1
# y == 2
# z == 3
シンボル_
は、プレースホルダの役割を果たすタプルの要素が必要な場合に使い捨ての変数名として使用できます。
a = 1, 2, 3, 4
_, x, y, _ = a
# x == 2
# y == 3
単一要素タプル:
x, = 1, # x is the value 1
x = 1, # x is the tuple (1,)
Python 3では、 *
接頭辞を持つターゲット変数をcatch-all変数として使用できます(「 反復可能パッケージの解凍 」を参照)。
first, *more, last = (1, 2, 3, 4, 5)
# first == 1
# more == [2, 3, 4]
# last == 5
要素の逆転
タプル内の要素を逆順にする
colors = "red", "green", "blue"
rev = colors[::-1]
# rev: ("blue", "green", "red")
colors = rev
# colors: ("blue", "green", "red")
または、逆順を使用する(逆順は、反復をタプルに変換する):
rev = tuple(reversed(colors))
# rev: ("blue", "green", "red")
colors = rev
# colors: ("blue", "green", "red")
ビルトインタプル関数
タプルは次の組み込み関数をサポートしています
比較
要素が同じ型の場合、Pythonは比較を実行し、結果を返します。要素が異なる型である場合、要素が数値かどうかをチェックします。
- 数字の場合は比較を行います。
- いずれかの要素が数値の場合は、もう一方の要素が返されます。
- そうでなければ、型はアルファベット順にソートされます。
リストの1つの終わりに達すると、長いリストは「より大きい」ものになります。両方のリストが同じ場合は、0を返します。
tuple1 = ('a', 'b', 'c', 'd', 'e')
tuple2 = ('1','2','3')
tuple3 = ('a', 'b', 'c', 'd', 'e')
cmp(tuple1, tuple2)
Out: 1
cmp(tuple2, tuple1)
Out: -1
cmp(tuple1, tuple3)
Out: 0
タプル長
関数len
は、タプルの合計長を返します
len(tuple1)
Out: 5
タプルの最大値
関数max
はタプルの項目をmax
返します
max(tuple1)
Out: 'e'
max(tuple2)
Out: '3'
タプルの最小値
関数minは、最小値を持つタプルからアイテムを返します
min(tuple1)
Out: 'a'
min(tuple2)
Out: '1'
リストをタプルに変換する
ビルトイン関数tuple
、リストをtuple
変換します。
list = [1,2,3,4,5]
tuple(list)
Out: (1, 2, 3, 4, 5)
タプル連結
+
を使用して2つのタプルを連結する
tuple1 + tuple2
Out: ('a', 'b', 'c', 'd', 'e', '1', '2', '3')