Yamamoto's Laboratory
 
環境設定
 
プログラム作成
  書き方
 
 シーケンス型
 
 
 
tkinter
 
 
 
 
 
 

はじめに

順番に複数のデータが並んでいる場合には,シーケンス型が便利です.Python には,list, tuple, str, bytearray, bytes があります.シーケンス型では,メンバテスト関数(in),サイズ関数(len),スライス([])が使えます.

リスト

リストとは

リストは,複数のデータをひとつにまとめたものです.例えば,

a = [1, 2, 3, 4.1, 5,3, 6.5]

です.個々のデータはカンマ( , )で分けられ,角括弧( [ ] )でひとつにまとめられます.データへのアクセスは a[3] とし,この場合の戻り値は 4.1 です.

個々のデータの型は,同一である必要はありません.

a = [1, 'one', 3.1415, 2.7182818, 'hoge', 'fuga', math.sin]

数値や文字列,組み込み関数もリストのメンバーにすることが可能です.この例では,a[6](math.pi/2) とすると 1 が得られます[注意].要するに,リストはオブジェクトを格納するということです.

リストの作成

単純な方法 (リテラル・繰り返し)

直接値を指定 (リテラル) ,あるいは繰り返し処理により,リストの作成ができます.

b = []
for i in range(0, 10):
    b.append(2*i)

リスト内包表記

高度なリストを作成する場合,リスト内表記は,とても便利です.

一次元

リストの内包表記 (List Comprehensions) を使うと,すっきりとリストが生成できます.例えば,[0, 1, 4, 9, 16, … , 100] は,次のように記述できます.

a = [i**2 for i in range(0, 11)]

この動作は説明するまでもないでしょう.以下と全く同じです.

a = []
for i in range(1, 11):
    a.append(i**2)

リスト内包表記を使うと,プログラムが短くなり,内容が分かりやすくなります.シーケンス — 他のプログラミング言語では配列など — を使った処理では,繰り返し文が多く現れます.単純な処理であっても数行を要し,ソースコードが読み難くくなってしまいます.それに対して,リストの内包表記では1行ですので,とても解りやすいソースコードになります.

多次元

二次元のリスト内包表記は,以下のようにします (実際のプログラム).

a = [[(i, j) for j in range(3)] for i in range(4)]

このリスト内表記の a の値は,[[(0, 0), (0, 1), (0, 2)], [(1, 0), (1, 1), (1, 2)], [(2, 0), (2, 1), (2, 2)], [(3, 0), (3, 1), (3, 2)], [(4, 0), (4, 1), (4, 2)]] です.

三次元は,次のようにします (実際のプログラム).

a = [[[100*i+10*j+k for k in range(10)] for j in range(10)] for i in range(10)]

四次元以上も同じです.

シーケンス型の関数・演算子

全てに適用

シーケンス型に関する演算子と関数
演算 演算結果
x in s s のある要素が x と等しければ True , そうでなければ False
x not in s s のある要素が x と等しければ False, そうでなければ True
s + t s と t の結合
s * n または n * s s の浅いコピー n 個の結合
s[i] s の 0 から数えて i 番目の要素
s[i:j] s の i から j までのスライス
s[i:j:k] s の i から j まで、 k 毎のスライス
len(s) s の要素数
min(s) s の最小の要素の値
max(s) s の最大の要素の値
s.index(x[, i[, j]]) s 中で x が最初に出現するインデックス (インデックス i 以降からインデックス j までの範囲)
s.count(x) s 中に x が出現する回数。

ミュータブルなシーケンス型に適用

ミュータブルなシーケンス型に関する演算子と関数
演算 演算結果
s[i] = x s の要素 i に, x の値を代入します.
s[i:j] = t s の i から j 番目までのスライスをイテラブル t の内容に入れ替えます
del s[i:j] s[i:j] = [] と同じです
s[i:j:k] = t s[i:j:k] の要素を t の要素と入れ替えます
del s[i:j:k] リストから s[i:j:k] の要素を削除します
s.append(x) x をシーケンスの最後に加えます (s[len(s):len(s)] = [x] と同じ)
s.clear() s から全ての要素を取り除きます (del s[:] と同じ)
s.copy() s の浅いコピーを作成します (s[:] と同じ)
s.extend(t) s を t の内容で拡張します (s[len(s):len(s)] = t と同じ)
s.insert(i, x) s の i で与えられたインデクスに x を挿入します。 (s[i:i] = [x] と同じ)
s.pop([i]) s から i 番目の要素を取り出し、また取り除きます。
s.remove(x) s から s[i] == x となる最初の要素を取り除きます
s.reverse() s をインプレースに逆転させます

ページ作成情報

参考資料

  1. 演算子に関しては,Python 3.4.2 ドキュメント組み込み型を参考にしました.
  2. 初めての Python
    初めてのPython 第3版      初めてのPython 第3版
    Mark Lutz 夏目 大

    オライリージャパン 2009-02-26
    売り上げランキング : 78605

    Amazonで詳しく見る
    by G-Tools

更新履歴

2015年01月01日 ページの新規作成


no counter