型の種類 リスト
リストを使う
リストには、数値や文字列など複数の要素に順序をつけて収めることができます。リストはCやJavaなどの配列に相当するデータ型です。CやJavaなどの配列は、決まった型を持ったオブジェクトしか収めることができませんが、Pythonのリストにはどんなオブジェクトも収めることができます。数値、文字列はもちろん、リストそのものを要素として収めることができます。リストの長さも、必要に応じて自動的に増減します。
リストを定義する方法は、全体を角カッコ("["や"]")で囲み、リストに収める要素はコンマで区切ります。
>>> a = [ 1, 2, "ab", "cd"] ←"ab","cd"は文字列です。
>>> a
[1, 2, 'ab', 'cd']
インデックスを指定して要素を取り出す
インデックスを指定して要素を取り出す方法は、角カッコの中に整数を記入します。インデックスは0から数えます。インデックスとしてマイナスの整数を指定すると、最後から数えた要素を取り出せます。
>>> a = [ 1, 2, 3, 4, 5]
>>> a[2] ←リストの要素を取り出す。
3
>>> a[-1] ←リストの最後の要素を取り出す。
5
>>> a[100] ←要素数を超える数値を指定するとエラーになります。
Traceback (most recent call last):
File , line 0, in <stdin>##11
IndexError: index out of range: 100
スライスを利用して要素を取り出す
「スライス」を使うと、リストに収められた複数の要素を取り出せます。リストの要素を指定するとき、コロン(:)を使って区切った複数の整数を記入します。
リスト名[取り出すインデックス:取り出す要素より1つ大きいインデックス]
>>> a = [ 1, 2, 3, 4, 5]
>>> a[1:3] ←インデックスの1から2までを取り出す
[2, 3]
>>> a[3:4] ←インデックスの3だけを取り出す
[4]
スライスを使い、リストの一部を取り出した結果として返ってくるのはリストです。"a[3:4]"では、整数を一つだけ含んだリストが返ってきます。
スライスに記入するインデックスは省略できます。コロンの前を省略すると、"0"を指定した場合と同じに扱われ、要素の最初からという意味になります。コロンのあとを省略すると、要素の最後までという意味になります。またコロンの後ろに要素数を超える大きな整数を指定してもエラーになりません。
>>> a = [ 1, 2, 3, 4, 5]
>>> a[2:] ←インデックスの2から最後まで
[3, 4, 5]
>>> a[:3] ←最初からインデックスの2まで
[1, 2, 3]
>>> a[2:100] ←エラーにならない。
[3, 4, 5]
リストの足し算、掛け算
リストは足し算と掛け算を行うことができます。
数値同士の足し算とは異なり、リストに対する足し算は「リスト同士の連結」という意味になります。このため、演算子の左右はリストである必要があります。
>>> a = [ 1, 2, 3, 4, 5]
>>> b = a + 100 ←リストに数値を足すとエラー
Traceback (most recent call last):
File , line 0, in <stdin>##25
IndexError: can only concatenate list (not "int") to list
>>> b = a + "abc" ←リストに文字列を足してもエラー
Traceback (most recent call last):
File , line 0, in <stdin>##26
IndexError: can only concatenate list (not "str") to list
>>> b = a + [100]
>>> b
[1, 2, 3, 4, 5, 100]
>>> c = b + a
>>> c
[1, 2, 3, 4, 5, 100, 1, 2, 3, 4, 5]
リストに対する掛け算は、文字列に対する掛け算と同じで「繰り返し」になります。
>>> a = [ 1, 2, 3, 4, 5]
>>> a * 3
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
リストの最大値、最小値を得る
リストの要素から最大値、最小値を取り出すためには、組み込み関数max()とmin()を使います。
>>> a = [ 1, 2, 3, 4, 5]
>>> max(a)
5
>>> min(a)
1
max()、min()ともリストの要素が数値であれば期待どおりの結果になりますが、数値以外の要素を含んでいるリストの場合、期待した結果にはならないです。
>>> c = ["0", 2,3,4,5]
>>> max(c)
'0' ←文字列は数値データより大きい
>>> min(c)
2
リストのメゾットを使う
L.sort([ソート用関数名[,比較対象を取り出す関数名[,並び順指定フラグ]]])[ ]で囲ったところは省略可能です。
Lを対象に並べ替えを行い、L自体を書き換えます。"ソート用関数名"は二つの引数を持つ関数で組み込み関数のcmpのように結果を返す関数です。引数として指定するとソートに利用します。"比較対象を取り出す関数名"は引数を一つだけ持つ関数を指定します。リストの要素から比較対象を取り出すのに利用されます。例えば、文字列比較の時、小文字にしてから比較する場合はstr.lowerを使えばいいのです。"並び順指定フラグにTrueを指定すると並び順を反転します。
L.reverse()
Lの並び順を反転し、L自体を書き換えます。
>>> b = ["a", "c", "B", "e", "D"]
>>> b
['a', 'c', 'B', 'e', 'D']
>>> b.sort()
>>> b
['B', 'D', 'a', 'c', 'e'] ←普通のソートすると大文字/小文字を分けてしまう。
>>> b.sort(cmp, str.lower, False) ←全てを小文字にしてから比較する。
>>> b
['a', 'B', 'c', 'D', 'e']
>>> a = [ 1, 2, 3, 4, 5]
>>> a.sort(cmp, None,True) ←リバースをソートで表す。
>>> a
[5, 4, 3, 2, 1]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]
>>> a.reverse()
>>> a
[5, 4, 3, 2, 1]
L.remove(取り除く要素)Lの中から"取り除く要素"を探し出し、最初に見つけた要素をL自体から削除します。引数として指定された要素が見つからなかった場合はエラーを発生します。
L.append(追加する要素)
Lの末尾に"追加する要素"を追加し、L自体を書き換えます。
L.extend(追加するシーケンス)
Lの末尾に"追加するシーケンス"の各要素を連結します。append()と違い、複数の要素を追加したいときに利用します。
>>> a = ["a", "b","c", "d",
"e", "c"]
>>> a
['a', 'b', 'c', 'd', 'e', 'c']
>>> a.remove("c")
>>> a
['a', 'b', 'd', 'e', 'c'] ←最初に見つけた'c'だけが削除されます。
>>> a.extend('abcde') ←文字列はシーケンスとして追加されます。
>>> a
['a', 'b', 'd', 'e', 'c', 'a', 'b', 'c', 'd', 'e']
>>> a.append('abcde') ←文字列は要素として追加されます。
>>> a
['a', 'b', 'd', 'e', 'c', 'a', 'b', 'c', 'd', 'e', 'abcde']
L.pop([インデックス])
[ ]で囲ったところは省略可能です。
Lの要素を一つだけ取り除き、戻り値として取り除いた要素を返します。引数としてインデックスに相当する数値を指定しない場合はLの末尾を対象に操作を行います。
>>> a = ["a", "b","c", "d",
"e"]
>>> a.pop()
'e'
L.index(検索したい要素[,開始インデックス [, 終了インデックス]])
[ ]で囲ったところは省略可能です。
Lの中から検索したい要素を探し出し、インデックスを返します。見つからなかった場合はValueErrorという例外を発生します。