メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年1月28日月曜日

[Python][お勉強] Python入門(7) - リスト

今回はPythonにおけるリストを学ぶ。

最終目標

  • リストを理解する。
  • リストの基本的操作を覚える。

リストとは

「一定の順序でならんだオブジェクトの集合」とのこと。
ま、いわゆるリスト。ここはOK。

さらにPythonでは、

  • 要素の型を問わない。
  • インデックスによって要素にアクセスできる
といった特徴がある。
・・・別にPythonに限ったことではない。。

  • 「シーケンス」カテゴリ
  • オブジェクトリファレンスの配列
らしい。
ここであたらしくカテゴリという言葉が出てきた。これは、Pythonではビルトインオブジェクトは大きくいくつかのカテゴリに分けることができる。同じカテゴリであればほぼ同じ操作を行える。カテゴリには以下の3つがあるらしい。
  • 数値
  • シーケンス
  • 写像

で、文字列もリストも「シーケンス」に分類される。だから文字列に対する操作とリストに対する操作が似た感じになる。

次の項目にオブジェクトリファレンスとあるが、リストは正確にはオブジェクトへのリファレンスの配列なのだそうだ。簡単に言えばポインタの配列。ただし可変長。



リストの基本的な操作

リストの基本的な操作を以下に列挙する。

操作説明
L1 = []空リストの作成
L2 = [0, 1, 2, 3]4つの要素を含むリストの作成
L3 = ['abc',['def','ghi']]リストのネスト
L2[i]インデクシング
L3[i][j]インデクシングのインデクシング
L2[i:j]スライシング
len(L2)長さの確認
L1 + L2連結
L2 * 3繰り返し
for x in L2
3 in L2
ループ、特定の要素が含まれているかの確認
L2.append(4)
L2.extend([5,6,7])等
メソッド
del L2[k]
del L2[i:j]
L2.pop()
L2[i:j] = []
リストの縮小
L2[i] = 1
L2[i:j] = [4,5,6]
インデックスを指定しての値変更
range(4)整数のリスト
xrange(0, 4)タプルの作成
L4 = [x ** 2 for x in range(5)リスト内包表記



全体的にほぼ文字列に対する操作と一緒。

で、実際にやってみる。

>>> len([1, 2, 3, 4]) #長さ
4
>>> [1, 2, 3, 4] + [5, 6, 7, 8] # 連結
[1, 2, 3, 4, 5, 6, 7, 8]
>>> [1,2, 3] * 4 # 繰り返し
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> 3 in [1, 2, 3] # 要素が含まれているか
True
>>> 0 in [1, 2, 3]
False
>>>
>>> for x in [1, 2, 3] : print x # ループ
...
1
2
3
>>>
>>> str([1,2,3]) # 文字列へ変換
'[1, 2, 3]' # (list->string '(1 2 3))な感じ??
>>> [1,2,3] + list("456") # リストと文字列の連結。結果はリスト。
[1, 2, 3, '4', '5', '6'] # (append '(1 2 3) (string->list "456"))な感じ??


ふむ。だいたい分かった。


リストの中にリストを入れられるので、2次元配列でも3次元配列でも可能。
2次元配列の例は以下のとおり。

>>> L1 = [[1,2,3],[4,5,6]]
>>> L1
[[1, 2, 3], [4, 5, 6]]
>>> L1[1][1]
5
>>> L1[0][0]
1
>>>

上記のように[][]で要素を指定する。

リストの要素を削除するにはdel演算子を使えば良いらしい。


>>> L1 = [1,2,3,4]
>>> L1
[1, 2, 3, 4]
>>> del L1[3]
>>> L1
[1, 2, 3]
>>>


たとえば、ある特定の範囲を削除するにはスライシングとdelを使用する。

>>> L1 = [1,2,3,4,5]
>>> del L1[3:]
>>> L1
[1, 2, 3]


また上記の別のやり方。

>>> L1 = [1,2,3,4,5]
>>> L1[3:] = []
>>> L1
[1, 2, 3]
>>>

と削除対象がスライシングの場合空リスト([])を代入すると同じことになる。


まとめ

  • リストの基本的操作をマスターした。
  • リストはオブジェクトリファレンスの配列。
  • mutableな属性をもつため、要素を直接編集できる。
  • リストは「シーケンス」カテゴリ。よって文字列操作とほぼ同じ操作で扱える。
ほっほぅ。


0 コメント: