sec02 - tupleのスライス

tupleのスライスは、listのスライスと考え方は同じです。スライスは指定した範囲の要素を抜き出して、新しいtupleを作るという挙動の為、要素の追加や編集ができないtupleでも使用することが出来ます。

スポンサーリンク

tupleの要素番号の基本

このレクチャーでは、複数のデータ型を含む以下のtupleを用いて説明を行います。

sample_tuple = ('zero', 1, -222, -3.3, [4, 4.4], "5-five", 6.6, (7,))
[0][1][2][3][4][5][6][7]
[-8][-7][-6][-5][-4][-3][-2][-1]
'zero'1-222-3.3[4, 4.4]"5-five"6.6(7,)

まずは、基本となる要素番号の指定についておさらいします。

要素番号の先頭は[0]で、順番に番号が振られます。今回のサンプルの要素数は"8"なので、[0]から[7]までの要素番号が割り当てられています。

また、要素番号の最後から順に指定することもできます。その場合は[-1]から順に番号を指定します。

sample_tuple = ('zero', 1, -222, -3.3, [4, 4.4], "5-five", 6.6, (7,))

# 要素番号[0]から順に
print(sample_tuple[0])  # 'zero'
print(sample_tuple[1])  # 1
print(sample_tuple[2])  # -222
print(sample_tuple[3])  # -3.3
print(sample_tuple[4])  # [4, 4.4]
print(sample_tuple[5])  # "5-five"
print(sample_tuple[6])  # 6.6
print(sample_tuple[7])  # (7,)

# 要素番号[-1]から順に
print(sample_tuple[-1])  # (7,)
print(sample_tuple[-2])  # 6.6
print(sample_tuple[-3])  # "5-five"
print(sample_tuple[-4])  # [4, 4.4]
print(sample_tuple[-5])  # -3.3
print(sample_tuple[-6])  # -222
print(sample_tuple[-7])  # 1
print(sample_tuple[-8])  # 'zero'

tupleのスライス

tupleのスライスのルールは次の通りです。基本的に文字列の時と同じです。

  • [n:m]: [n]から[m]の1つ手前までのtupleを返します
    • 要素番号をマイナスで指定した時もルールは同じ
    • n, mで指定する範囲は、実際のtupleの要素番号の範囲外でも指定可能
      (※ 要素を単体で指定([n])する場合は、要素番号の範囲内である必要があります。)
  • [:m]: 最初の要素を指定しない場合は、[0]から[m]の1つ手前までのtupleを返します
  • [n:]: 最後の要素を指定しない場合は、[n]から1番最後までのtupleを返します
  • [:]: コロンの左右に何も指定しない場合は[0]から1番最後までのtupleを返します
  • [n:m:step]: step数を入力すると、[n:m]の範囲内でstep数ごとに要素を抽出します
    • step使用時、n, mの値は省略可能
    • stepマイナスの値を指定することも可能
      • ※ マイナスの値を指定した場合は、逆順に要素が抽出されます。この時、nmの値は、[n]の要素の位置より[m]の要素の位置の方が左側を指定していないと要素0のtupleが返されるので注意が必要です。(要素を抽出する順に、始点要素番号と終点要素番号を指定します。)
        例:
        [5:1:-1]のように指定します。

下記コードは、各ルールのサンプルになります。出力結果を、要素番号表と照らし合わせながら確認してみましょう。

sample_tuple = ('zero', 1, -222, -3.3, [4, 4.4], "5-five", 6.6, (7,))

print('[0:3]:\t',    sample_tuple[0:3])     # [0:3]:    ('zero', 1, -222)
print('[4:-1]:\t',   sample_tuple[4:-1])    # [4:-1]:   ([4, 4.4], '5-five', 6.6)
print('[-9:9]:\t',   sample_tuple[-9:9])    # [-9:9]:   ('zero', 1, -222, -3.3, [4, 4.4], '5-five', 6.6, (7,))
print('[:6]:\t',     sample_tuple[:6])      # [:6]:     ('zero', 1, -222, -3.3, [4, 4.4], '5-five')
print('[-4:]:\t',    sample_tuple[-4:])     # [-4:]:    ([4, 4.4], '5-five', 6.6, (7,))
print('[:]:\t',      sample_tuple[:])       # [:]:      ('zero', 1, -222, -3.3, [4, 4.4], '5-five', 6.6, (7,))
print('[0:6:2]:\t',  sample_tuple[0:6:2])   # [0:6:2]:  ('zero', -222, [4, 4.4])
print('[::-1]:\t',   sample_tuple[::-1])    # [::-1]:   ((7,), 6.6, '5-five', [4, 4.4], -3.3, -222, 1, 'zero')
print('[5:1:-1]:\t', sample_tuple[5:1:-1])  # [5:1:-1]: ('5-five', [4, 4.4], -3.3, -222)
print('[1:5:-1]:\t', sample_tuple[1:5:-1])  # [1:5:-1]: ()  * nとmの指定が逆なので、要素数0のtupleが返される
[0][1][2][3][4][5][6][7]
[-8][-7][-6][-5][-4][-3][-2][-1]
'zero'1-222-3.3[4, 4.4]"5-five"6.6(7,)
スポンサーリンク