記事ディレクトリ
タプル
タプルは順序付けられた不変のコレクションであり、タプルでは重複するメンバーが許可されます。
タプルを作成する
空のタプルを作成する
Python では、()
空のタプルを表します。例えば:
a = ()
print(type(a)) # <class 'tuple'>
print(a) # ()
さらに、tuple
空のタプルは次の方法で作成することもできます 例えば:
a = tuple()
print(type(a)) # <class 'tuple'>
print(a) # ()
空でないタプルを作成する
()
タプルの初期値は、タプルの作成時に設定できます。例えば:
a = (1, 2, 3, 4, 5)
print(type(a)) # <class 'tuple'>
print(a) # (1, 2, 3, 4, 5)
タプルに格納される要素は、さまざまなタイプである可能性があることに注意してください。例えば:
a = (1, 'hello', True, [4, 5, 6])
print(type(a)) # <class 'tuple'>
print(a) # (1, 'hello', True, [4, 5, 6])
タプル要素を変更する
tuple の機能は基本的に list と同じですが、tuple は不変のコレクションであるため、tuple は tuple を変更するメソッドを提供しません。タプルの値を変更したい場合は、タプルをリストに変換し、リストを変更してからタプルに戻すことができます。例えば:
a = (1, 2, 3, 4)
tmp = list(a) # 将元组转换成列表
tmp[0] = 10 # 更改列表
a = tuple(tmp) # 将列表转换回元组
print(a) # (10, 2, 3, 4)
提案:このメソッドはタプルを変更できますが, そうすることはお勧めしません. シーケンス内の要素を変更する必要がある場合は, リストに直接保存することをお勧めします.
タプル要素を見つける
in および in not 演算子
in および in not 演算子を使用して、要素がタプルに存在するかどうかを判断します。例えば:
a = (1, 2, 3, 4)
print(1 in a) # True
print(10 in a) # False
print(1 not in a) # False
print(10 not in a) # True
指数法
index メソッドを使用して、要素がタプルに存在するかどうかを判断することもできます。例えば:
a = (1, 2, 3, 4)
print(a.index(3)) # 2
# print(a.index(10)) # 不存在,抛异常
注: index メソッドを使用する場合、検索対象の要素がタプル内にある場合は要素の添え字が返され、そうでない場合は例外がスローされます。
タプル要素への添え字アクセス
タプル要素にアクセスする
[]
指定した添字位置の要素は、添字アクセス演算子を介して取得できます。例えば:
a = (1, 2, 3, 4)
print(a[2]) # 3
注:指定された添え字の値がタプルの最大添え字を超えると、例外がスローされます。
マイナス指数
[]
添え字アクセス演算子で指定された添え字は負の数を取ることができます, これを負のインデックスと呼びます. 負のインデックスは実際にはタプルの最後の要素から始まり, -1, -2, -3, の順で進みます. ... 例:
したがって、タプルの最後の要素にアクセスする場合は、添え字 -1 を使用して要素に直接アクセスできます。例えば:
a = (1, 2, 3, 4)
print(a[-1]) # 4
タプル要素を繰り返す
for ループトラバーサル
for ループでタプルをトラバースする場合、タプルを反復可能なオブジェクトとして直接トラバースするか、タプル内の要素の添字をトラバースしてから、添字アクセス演算子を使用して各要素に順番にアクセスできます[]
。例えば:
a = (1, 2, 3, 4)
# 方式一
for elem in a:
print(elem)
# 方式二
for i in range(len(a)):
print(a[i])
説明すると、タプルの要素数は len 関数で取得できます。
while ループがトラバースする
while ループでタプル内の要素の添字をトラバースし、添字アクセス演算子を使用して[]
各要素に順番にアクセスすることもできます。例えば:
a = (1, 2, 3, 4)
i = 0
while i < len(a):
print(a[i])
i += 1
部分抽出
[開始添え字: 終了添え字]
[起始下标 : 结束下标]
start subscript から end subscript までのタプルから抽出できる要素のセット。例えば:
a = (1, 2, 3, 4)
print(a[1:3]) # (2, 3)
注:抽出されたサブタプルには、開始添字の要素が含まれていますが、終了添字の要素は含まれていません (前に閉じて後で開く)。
スライス時に境界を省略する
部分タプルを抽出する処理はスライスの処理とも呼ばれ、[起始下标 : 结束下标]
途中でスライスする場合は開始添字または終了添字を省略できます。
- ある方法でスライスした場合
[起始下标 : ]
、サブタプルの要素には、開始添字を持つ要素とその後続の要素が含まれます。 - にスライスされた場合
[ : 结束下标]
、サブタプルの要素には、終了添字までのすべての要素が含まれます。 - でスライスした場合
[ : ]
、サブタプルの要素には元のタプルのすべての要素が含まれます。
スライスの例:
a = (1, 2, 3, 4)
print(a[1:]) # (2, 3, 4)
print(a[:2]) # (1, 2)
print(a[:-1]) # (1, 2, 3)
print(a[::]) # (1, 2, 3, 4)
注:スライス時に負のインデックスを使用することもできます。
スライス時のステップ サイズを指定する
方法をスライスすると、[起始下标 : 结束下标 : 步长]
ステップ サイズ、つまり、各要素にアクセスした後に添字がインクリメントするステップ数を指定できます。例えば:
a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
print(a[::1]) # (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
print(a[::2]) # (1, 3, 5, 7, 9)
print(a[::3]) # (1, 4, 7, 0)
print(a[1:-1:2]) # (2, 4, 6, 8)
また、スライス時に指定するステップサイズは負の数でも構いません。つまり、奥から手前に要素が抽出されます。例えば:
a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
print(a[::-1]) # (0, 9, 8, 7, 6, 5, 4, 3, 2, 1)
print(a[::-2]) # (0, 8, 6, 4, 2)
スライス時の添え字の範囲外の問題
スライス時に記入する添え字が有効範囲を超えた場合、プログラム実行後に例外はスローされませんが、要件を満たす要素は可能な限り抽出されます。例えば:
a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
print(a[1:100]) # (2, 3, 4, 5, 6, 7, 8, 9, 0)
スプライスタプル
+ を使用してタプルを連結します
+ を使用して、2 つのタプルを連結します。例えば:
a = (1, 2, 3)
b = (4, 5, 6)
c = a + b
print(a) # (1, 2, 3)
print(b) # (4, 5, 6)
print(c) # (1, 2, 3, 4, 5, 6)
注: + スプライシングを使用した後、新しいタプルが生成されますが、この操作は元の 2 つのタプルには影響しません。
+= を使用してタプルを連結します
+= を使用して、タプルを次々と連結します。例えば:
a = (1, 2, 3)
b = (4, 5, 6)
a += b
print(a) # (1, 2, 3, 4, 5, 6)
print(b) # (4, 5, 6)
説明:
- タプルは不変のコレクションであるため、タプルを別のタプルの背後にスプライスするための拡張メソッドは提供されません。
a += b
同様にa = a + b
、スプライシング プロセス中に、スプライシングされたタプルが最初に構築され、次に a の元のタプルが解放され、次にスプライシングされたタプルが a に割り当てられます。このプロセスは、元々管理されていたタプルを変更しませんを。
タプルによく使われるインターフェースのまとめ
タプル操作:
タプル操作 | 道 |
---|---|
部分抽出 | thistuple[start:end:step] (フロントクローズ、リアオープン) |
タプルチェック | in とin not |
タプル連結 | + と+= |
タプルの長さ | len() 関数 |
タプルのメンバー関数:
メンバー関数 | 関数 |
---|---|
索引 | 指定された値を持つ要素の添え字 (最初に出現) を返します |
カウント | 指定された値を持つ要素の数を返します |