要素の全てのindex(場所)を調べる関数
前回見たtupleのメソッドindexは
調べたい要素について
tuple型データの調べたい範囲に含まれるものの内
最初に出てくるindex(場所)
を返すもの。
それでは調べたい要素について、全てのindex(場所)を調べるならどうすれば良いか。
下記”findposi”の様な関数(function)を作って対応すれば可能。
このfunctionは対象がlistでも使える。
このfunction “findposi(iterableなデータ, 求めたい要素)”は、tupleやlistの様なiterableなデータを引数itrに、求めたい要素を引数nに入れて実行すればその要素の全てのindexのlistを、要素を含まない時は空listを返す。
>>> tpl1 (1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3) >>> def findposi(itr, n): ... return [i[0] for i in enumerate(itr) if i[1] == n ] >>> findposi(tpl1, 3) # 関数findposiの実行例、"tpl1"に含まれる"3"の場所を求める場合 [2, 5, 8, 11] # indexが2、5、8、11の場所(1番目が0なので、前から3番目、6番目、9番目、12番目)にある
tupleの特徴
immutable以外のtupleの特徴は
- データ選択は場所(index)で選ぶ方法一択
- 一時的に書き込んで参照するメモ書きの様な使い方に向いている
- 若干高速
という所。
データ選択は場所(index)で選ぶ方法一択
tupleにおいて、一度保存したデータアクセスする方法は場所(index)一択。
index一択でしか選べない割に、addで追加してもそれがどのindexに入るのかは入れてみないと分からない。
また、名前や、popで常に同じ場所を削っていく、という芸当もできない。
常に場所を探してそのindexを利用して選択、と言う手続きになる。
一時的に書き込んで参照するメモ書きの様な使い方に向いている
tupleには何でも書き込めるメモ帳みたいな存在。
逆に言うと、コラム(行)を切ってそれぞれのコラムにstr型、int型、等属性を決めて入力し、データ保存、と言う使い方には向いていない。
>>> tpl8 = tuple(["Apple", "red", 10]) >>> tpl8 ('Apple', 'red', 10) >>> tpl9 = tuple(['blue', 20, 'Banana', 30]) >>> tpl9 ('blue', 20, 'Banana', 30)
tpl8の様に、3行コラム(行)を切って属性を決めてデータ管理したくても、属性も要素数も異なるデータを入れる事ができ、エラーをチェックする仕組みもない。
何行も行を切って複数の属性を表現する様なデータを管理する様な使い方には向かない。
簡単に書き込んで簡単に参照する印象。
若干高速
mutableなlistと比べて、と言う所だと思うが、tupleは処理が若干高速との事。
とは言え一般に使用する分には気にする程のものではないと言うのが現時点の理解。
tupleの使い所
immutableな特性を活かして、短期的に長期的に不変なデータを保持し、そのデータからで要素を取り出したり、新たなデータを作る。
と言うような、多くない個数(数が多いとindexの管理が大変なので)のデータを一時的な使うずっと参照するデータの簡単なメモとして使用するのが一番と言う理解。
コメント