Python タプル型

スポンサーリンク
スポンサーリンク

特徴

  • 異なるデータ型の要素を格納可能
  • 長さ(要素数)が可変
  • 要素の書き換えが不可
  • インデックス(番号)で要素にアクセス
  • スライスが可能
  • 二次元、多次元配列が可能
要素の書き換えができないので、追加、削除、置換もできません。どうしても追加、削除、置換したい場合は一旦リスト型に変換してから追加、削除、置換することになります。
以下は、要素の追加の例です。

data = ('aaa', 'bbb', 'ccc') 
data = list(data) # リスト型に変換
data.append('ddd')
data = tuple(data) # タプル型に変換
print(data) # ('aaa', 'bbb', 'ccc', 'ddd')となる。

そもそもタプル型を使う意味はないかなと考えています。

初期設定

data = (1, 2, 3, 4, 5)
print(data[0]) # 1と表示される 

# 二次元配列
data = ((1, 2, 3), (4, 5, 6))
print(data[0][0]) # 1と表示される 

# 多次元配列
data = (((1, 2, 3), (4, 5, 6), (1, 2, 3), (4, 5, 6), (1, 2, 3), (4, 5, 6)), ((1, 2, 3), (4, 5, 6), (1, 2, 3), (4, 5, 6), (1, 2, 3), (4, 5, 6)))
print(data[0][0][0]) # 1と表示される 

# Rangeから作成
data = tuple(range(6))
print(data) # (1, 2, 3, 4, 5)となる。 

値の取得

基本的にリストと同じです。

指定した位置(インデックス)の値を取得

data = (1, 2, 3, 4, 5)
print(data[0])
# 1

# 二次元配列 
data = ((1,2,3],[4,5,6))

print(data[0][0])
# 1

指定した値の位置(インデックス)を取得

data = (1, 2, 3, 4, 5, 2)

print(data.index(2))
# 1
同じ値がある場合は、はじめの位置を返します。

最大値・最小値を取得

  • 最大値:max(data)
  • 最小値:min(data)
data = (1, 2, 3, 4, 5, 2)

print(max(data))
print(min(data))
# 5
# 1

平均値を取得

関数がありませんので。Numpyを利用しましょう。

import numpy as np

data = (1, 2, 3, 4, 5, 2)

print(np.mean(data))
# 2.8333333333333335

値の変更

変更できない。
一旦、リスト型などに変換してから要素の値を変更して、その後、タプルに戻すなどとするしかない。

置換

置換できない。
一旦、リスト型などに変換してから置換して、その後、タプルに戻すなどとするしかない。

追加

追加できない。
一旦、リスト型などに変換してから要素を追加して、その後、タプルに戻すなどとするしかない。

結合

data_A = (1, 2, 3)
data_B = (4, 5, 6)
data = data_A + data_B
print(data) # (1, 2, 3, 4, 5, 6)となる。
追加はできないけど、結合はできます。結合は足すだけです。

削除

削除できない。
一旦、リスト型などに変換してから削除して、その後、タプルに戻すなどとするしかない。

重複の削除(排他)

基本

set()でset型のデータに変換します。その後、tuple()でリスト型に戻すことができます。
二次元配列ではエラーになります。

data = (5, 2, 4, 1, 3, 5, 3, 2)

data = set(data)
print(data)
# {1, 2, 3, 4, 5}

print(tuple(data))
# (1, 2, 3, 4, 5)

データの順番(順序)を元のままにする場合

sorted(, key=data.index)を組み合わせて変換します。その後、tuple()でリスト型に戻します。

data = (5, 2, 4, 1, 3, 5, 3, 2)

data = tuple(sorted(set(data),  key=data.index))
print(data)
# (5, 2, 4, 1, 3)

二次元配列の重複排他

Pythonには二次元配列の重複排他の関数は用意されていませんので自分で作る必要があります。

以下は、私が考えた完全一致と配列の指定要素の一致(部分一致)のサンプルになります。

data = ([5, 2], [4, 1], [1, 3], [5, 2], [1, 2])

# 完全一致
temp = []
data2 = tuple([val for val in data if val not in temp and not temp.append(val)])
print(data2)
# ([5, 2], [4, 1], [1, 3], [1, 2])

# 第1のみ一致
temp = []
data2 = tuple([val for val in data if val[0] not in temp and not temp.append(val[0])])
print(data2)
# ([5, 2], [4, 1], [1, 3])

値の有無

data = ('aaa', 'bbb', 'ccc')
if 'aaa' in data:
    print("YES")
リスト型と同じです。

個数

全ての要素数

data = ('aaa', 'bbb', 'ccc')
print(len(data)) # 3となる
リスト型と同じです。

指定した値と同じ値を持つ要素数

data = ('aaa', 'bbb', 'ccc')
print(data.count('aaa')) # 1となる。
リスト型と同じです。

合計・最大値・最小値を取得

  • 合計:sum(data)
  • 最大値:max(data)
  • 最小値:min(data)
data = (1, 2, 3, 4, 5)

print(sum(data))
# 15
print(max(data))
# 5

print(min(data))
# 1

位置を取得

data = ('aaa', 'bbb', 'ccc')
print(data.index('aaa')) # 0となる。
リスト型と同じです。

ソート(データの順番を変更)

dara_new = sorted(data, reverse=True)

  • dataがタプル型データになります。
  • dara_newはソートされた新たなリスト型データになります。
  • 元のデータはソートされません
  • reverseTrueで降順、Falseで昇順になります。デフォルトはFalse
data = (2, 0, 3, 1)
print(data)
# (2, 0, 3, 1)

dara_new = sorted(data)
print(data)
# (2, 0, 3, 1)

print(dara_new)
# [0, 1, 2, 3]

dara_new = sorted(data, reverse=True)
print(data)
# (2, 0, 3, 1)

print(dara_new)
# [3, 2, 1, 0]
タプル型のソートは、変換後にリスト型になりますので注意してください。

 

タイトルとURLをコピーしました