読者です 読者をやめる 読者になる 読者になる

はてブロ@ama-ch

https://twitter.com/ama_ch

今日のPython

Program Python

リストで利用できるメソッド一覧

p.147

メソッド 説明
S.sort(ソート関数名) Sを対象に並べ替えを行い、S自体を書き換える。ソート関数を指定することで、比較方法をコントロールできる。
S.reverse() Sの並び順を反転し、S自体を書き換える。
S.remove(取り除く要素) Sの中から取り除く要素を探し出し、削除する。見つからなかった場合は例外(エラー)を発生する。
S.append(追加する要素) Sの末尾に要素を追加し、S自体を書き換える。
S.extend(追加するシーケンス) Sの末尾に追加するシーケンスの各要素を連結する。複数の要素を追加したいときに利用する。
S.pop(インデックス) Sの要素をひとつだけ取り除き、戻り値として取り除いた要素を返す。S自体を書き換える。引数を指定しない場合、末尾を取り出す。
S.index() Sの中から検索したい要素を探し出し、インデックスを返す。見つからなかった場合は例外(エラー)を返す。

set型を操作する

p.148
要素が重複しない変更可能集合型オブジェクト。set型同士では&や|という演算子を使い、集合演算ができる。引き算はできるが、足し算やかけ算はできない。set型の要素には順番がないため、インデックスを使って取り出したり、スライスを使うことはできない。

set型のデータを作る

p.149

>>> s = set([1, 2, 3, 4])  #リストからset型を作る
>>> s
set([1, 2, 3, 4])
>>> from sets import Set  #setsモジュールからSetをインポート
>>> t = Set([1, 2, 3, 4])  #リストからSet型を作る
>>> t
Set([1, 2, 3, 4])

set型と同様のデータ型を提供するSetクラスというものがあり、使うにはsetsモジュールをインポートする必要がある。setsモジュールはPythonで実装されており、Cで実装されたset型の方が高速。

set型を操作する

p.150

>>> s = set([1, 2, 3, 4])
>>> s.add(5)  #要素を追加
>>> s
set([1, 2, 3, 4, 5])
>>> s.add(2)  #既存の要素を追加
>>> s
set([1, 2, 3, 4, 5])  #重複しない
>>> s & set([4, 5, 6, 7])  #集合の積(共通要素)
set([4, 5])
>>> s | set([4, 5, 6, 7])  #集合の和
set([1, 2, 3, 4, 5, 6, 7])
set型のメソッド

p.151

メソッド 説明
S.union(S2) SとS2に含まれる要素のうち、重複しない要素を持つ集合(和集合)を返す。「S S2」と同じ。
S.intersection(S2) 「S & S2」と同じ
S.difference(S2) 差集合を返す。「S - S2」と同じ。
S.symmetric_difference(S2) どちらか一方に含まれる要素を集めた集合(対称的差集合)を返す。「S ^ S2」と同じ。
S.add(追加する要素) 引数を追加する。S自体が書き換わる。
S.remove(削除する要素) Sから引数を削除する。S自体が書き換わる。削除する要素が登録されていない場合、例外が発生する。同じような働きをするdiscardメソッドは、例外を発生しない。

addとremove以外はS自体が書き換わらないので注意!

辞書を操作する

辞書を組み合わせる

p.153

>>> dict = {"name":"Amano", "nickname":"ama-ch", "birthyear":1986}
>>> dict.update({"nickname":"amachan", "birthmonth":9, "birthday":7})
>>> dict
{'birthyear': 1986, 'birthday': 7, 'name': 'Amano', 'birthmonth': 9, 'nickname': 'amachan'}

update()で辞書の要素の上書きや追加ができる。

辞書のメソッドを活用する

p.155 よく使われる辞書のメソッド

メソッド 説明
D.has_key(キー) Dにキーが存在するかどうかを調べ、もし存在していたらTrueを返す
D.keys() Dに登録されているキーの一覧をリストとして返す
D.get(キー[,値]) キーに与えられた値を取り出す。オプションとして値を与えると、キーが存在しなかった場合に値を返す。オプションが与えられていず、かつキーが存在しない場合はNoneを返す。
D.setdefault(キー[,値]) Dからキーに割り当てられた値を返す。キーが存在せず、オプションが与えられていると値を返す。加えて、キーを新規に登録して値を代入する。
D.items() Dに登録されているキーと値をペアにしたタプルを、リストにして返す
D.values() Dに登録されている値をリストにして返す
D.update([要素]) Dを引数で上書きする。存在するキーは上書き、存在しないキーは新規に作る。


読み込んだファイルから、辞書を利用して単語の出現頻度を調べる

#!/usr/bin/env
# -*- coding: utf-8 -*-

# word_count.py
f = open("words.txt", "r")
s = f.read()
s = s.lower()  #大文字小文字を同一視
f.close()

wordcount = {}

for word in s.split():
    wordcount[word] = wordcount.get(word, 0) + 1

wordlist = wordcount.items()
for item in wordlist:
    print item,

実行結果

$ python wordcount.py
('is', 1) ('my', 2) ('hello', 2) ('ama-ch.', 1) ('name', 1)

うーん、結果の出力が見にくいし、空白文字で区切るとカンマやピリオドがついた単語に対応できない・・・どうも辞書の使いかたが理解できていない。型を常に意識して書かないとメソッドもどれが使えるんだかよくわからないし、まだまだ修行不足です><