ラベル Code の投稿を表示しています。 すべての投稿を表示
ラベル Code の投稿を表示しています。 すべての投稿を表示

2010年9月27日月曜日

eval(), exec() 文字列をそのまま計算

evalで、文字列をそのまま、計算できる。しかし、プログラムを書く人から言わすと、「美しくない」らしい。(涙)
a=1
b=2
eval("a+b")
>> 3

代入は、execを使う。
exec("a=10")
a
>> 10

Compileに関しては、python3.0だけど、分かり易く、詳しく書いてある。
http://d.hatena.ne.jp/kotsubu-chan/20030331

eval(compile("3+4","","eval"))
>> 7

2009年11月21日土曜日

CSVファイルの取り扱い numpy

CSV ファイルの読み込み 戻り値 array型
>>> data = loadtxt("test1.csv",delimiter=",")

列0から列2の取り出し 
>>> col_a, col_b, col_c = data[:,0], data[0:,1], data[:,2]

行0の取り出し
>>> row_1 = data[0,:]

array型からlistに変換
>>> row_1
array([ 1., 2., 3.])

>>> list_1 = row_1.tolist()
>>> list_1
[1.0, 2.0, 3.0]

listからarray型に変換
>>> array(list_1)
array([ 1., 2., 3.])

2009年11月14日土曜日

リストの要素の近い値のインデックスを返す。numpy searchsorted()

numpy の関数 searchsorted() は、本来 リストに要素を追加したい場合に、そのリストの要素の順序を崩さないように追加できる、インデックスを返す。

>>> tt =[1,2,3,4,5,6,8,9]
>>> np.searchsorted(tt,7)
6
>>> np.searchsorted(tt,2)
1
>>> np.searchsorted(tt,2, side="right")
2
-----------------------------------------------------
numpy.searchsorted(a, v, side='left')

Find indices where elements should be inserted to maintain order.

Find the indices into a sorted array `a` such that, if the corresponding
elements in `v` were inserted before the indices, the order of `a` would
be preserved.

Parameters
----------
a : 1-D array_like of shape (N,)
Input array, sorted in ascending order.
v : array_like
Values to insert into `a`.
side : {'left', 'right'}, optional
If 'left', the index of the first suitable location found is given. If
'right', return the last such index. If there is no suitable
index, return either 0 or N (where N is the length of `a`).

コードの実行時間を計測する timer()

from timeit import Timer
timer()関数 こちらのサイトが詳しく書いてあります。

ひきメモ -- コードの実行時間を計測する

2009年11月3日火曜日

2009年10月24日土曜日

リスト操作 sort

これは、使えますね!!

>>> list =[["100/1", 105, 105, "Active"],
... ["100/2", 104, 104, "Non-Active"],
... ["100/1", 105, 105, "Non-Active"],
... ["100/2", 103, 102, "Active"],
... ["100/5", 104, 104, "Non-Active"]]
>>> list.sort()
>>> list
[['100/1', 105, 105, 'Active'], ['100/1', 105, 105, 'Non-Active'], ['100/2', 103, 102, 'Active'], ['
100/2', 104, 104, 'Non-Active'], ['100/5', 104, 104, 'Non-Active']]
>>>
こちらのブログが詳しいです。

リスト操作 enumerate

moji = ["a", "b", "c", "d", "e"]
>>> moji
['a', 'b', 'c', 'd', 'e']

for i,v in enumerate(moji):
print i, v
0 a
1 b
2 c
3 d
4 e


for i, v in enumerate(moji):
index_moji.append("%d, %s" % (i, v))
>>> index_moji
['0, a', '1, b', '2, c', '3, d', '4, e']


for i, v in enumerate(moji):
a = ["%d, %s" % (i, v)]
index_moji.append(a)
>>> index_moji
[['0, a'], ['1, b'], ['2, c'], ['3, d'], ['4, e']]

for i, v in enumerate(moji):
a = [i, v]
index_moji.append(a)
>>> index_moji
[[0, 'a'],[1, 'b'], [2, 'c'], [3, 'd'], [4, 'e']]

>>> moji
['a', 'b', 'c', 'd', 'e']

>>> index_moji
[[0, 'a'],[1, 'b'], [2, 'c'], [3, 'd'], [4, 'e']]

>>> len(moji)
5

>>> len(index_moji)
5


2009年10月23日金曜日

クラスの引数として、インスタンスを使う

クラスで構成されるPythonで、既存のクラスの再利用を考えると、クラスにメソッドを作り、その引数として、インスタンスを利用できるようになると、便利です。 以下のように、クラスTest1のインスタンスtest1を、クラスTest2の引数として使ってみる。

#クラスTest1のインスタンス test1には、アトリビュートmojiに "moji が入っている。
class Test1(object):
def __init__(self):
self.moji ="moji"
>>> test1 = Test1()
>>> print test1.moji
moji

#クラスの引数は、object. 使用するメソッドには、引数として インスタンス test1を入れる。
class Test2(object):
def __init__(self, test1):
self.test1 = test1
print test1.moji
print self.test1.moji

#インスタンスtest2 を作るときに、クラスにインスタンスtest1 を代入すると
>>> test2 = Test2(test1)
moji
moji

#もっと一般化すると, メソッドの引数を、、、、


class Test2(object):
def __init__(self, item):
self.item = test1
print self.item.moji

>>> test2 = Test2(test1)
moji

#もっと一般化すると, メソッドの引数を、、、、
class Test2(object):
def show(self,item):
self.item = test1
print self.item.moji
>>> test2 = Test2()
>>> test2.show(test1)
moji

#もっと一般化して、アプリケーションっぽく、、、これで使えるね。
class Test2(object):
def input(self,item):
self.item = test1
def show(self):
print self.item.moji
>>> test2 = Test2()
>>> test2.input(test1)
>>> test2.show()
moji



2009年10月18日日曜日

リスト操作 append, insert, del, map

リスト操作は、append だけじゃなくて、

insert 任意の場所に、要素を入れる。
del インデックスを指定して、その要素を削除。
map リストの要素に、一括処理を行う。 (なんか、使えそう。。)
時間があるとでも、まとめましょう。

ここは、まとまってますね。

ljust, rjust, center, zfill

便利そうな 文字列のメソッド

rjust 引数のLengthの文字列にして、右寄せにする。左はスペースで埋める
ljust, center は、左寄せ、中央寄せ

>>> "abcd".rjust(8)
' abcd'
>>> "abcd".ljust(8)
'abcd '
>>> "abcd".center(8)
' abcd '

zfill は、左寄せにして、"0”で埋める。 これは使えるかも。
>>> "abcd".zfill(8)
'0000abcd'
>>>


ショートカットキーを作る。

Pythonで、クラスの各メソッドに対して、ショートカットキーをつける。Bindを使う。

http://www.python.jp/pipermail/python-ml-jp/2002-October/001919.html

スペース区切りの文字列をリスト化。文字列を検索し、そのインデックスを返す。

やりたいこと
(1)文字列(1行)に、特定の単語Aが入っているかを確認する。
(2)単語Aの場所を探す
(3)単語Aにスペース区切りで続く、単語B,C,D,E,Fを取得したい。

note: いくつかのWebによると、正規表現より文字列メソッド(string module)の方が、高速だそうです。

(1) 文字列に、単語が含まれているか? → 文字列メソッド find

find( sub[, start[, end]])
文字列中の領域 [start, end] に sub が含まれる場合、 その最小のインデクスを返します。

>>> moji = "xxx xxxx xxx@ 1 2 3 44 555 xxx xxx"
>>> moji.find("xxx@")
9

http://www.python.jp/doc/2.5/lib/string-methods.html

(2) スペース区切りの文字列をリストにする → 文字列メソッド split

split( [sep [,maxsplit]])
sep を単語の境界として文字列を単語に分割し、分割された単語 からなるリストを返します。

>>> mojilist = moji.split()
>>> mojilist
['xxx', 'xxxx', 'xxx@', '1', '2', '3', '44', '555', 'xxx', 'xxx']

http://d.hatena.ne.jp/n00dle/20090705/1246726299
http://tibet.que.ne.jp/otani/2004python/python12.html

(3) リスト内の要素(文字列)のIndexの取得 -- 文字列メソッド index

リストに要素の検索だけなら in

>>> mojilist
['xxx', 'xxxx', 'xxx@', '1', '2', '3', '44', '555', 'xxx', 'xxx']
>>> "xxx@" in mojilist
True

文字列の場所(Index)の取得
>>> mojilist.index("xxx@")
2

(3) xxx@ に続く5個の文字列(要素)の取得

>>> mojilist[2+1:2+6]
['1', '2', '3', '44', '555']

http://d.hatena.ne.jp/yumimue/20071205/1196839438


あと、splitlines は、小さなファイルを解析する場合、便利そうです。たとえば、
1. テキストファイルを、1行ごとにリスト化
2. リストの要素を、スペース区切りにリスト化
3. リストの要素を、indexで検索

splitlines( [keepends])
文字列を改行部分で分解し、各行からなるリストを返します。

http://www.python.jp/doc/2.5/lib/string-methods.html

2009年10月12日月曜日

def __iadd__(self, xx) の戻り値self

みんなのPythonで、 特殊メソッド __iadd__ をあるクラスでオーバーライド(処理の内容を変更)するサンプルがあった。でも、なぜ、メソッド __iadd__ に、return self が必要なのだろう。

まず、Pythonでは、通常の演算子 +, - += は、以下のような特殊メソッドで処理されている。(らしい)
それらを、オーバーライドするから、return self が必要なのだろう。 iaddは、自分自身を戻す。なんかイメージはできるけど、具体的に説明できない。 ちょっとの間は、「おまじない」として割り切ろう。

class Klass(object):

# 「+」演算子
def __add__(self, *args):
print '__add__'
print args

# 「-」演算子
def __del__(self, *args):
print '__del__'
print args

# 「+=」演算子
def __iadd__(self, *args):
print '__iadd__'
print args
return self

詳しくは、ここに書いてあります。

2009年10月8日木曜日

Python チュートリアル

Pythonのチュートリアルを集めてみた。みんなのPythonが終了したら、読んでみる予定です。

サルでもわかる モンキーPython -- Netsphere Laboratories

インスタント・パイソン -- www.python.jp

インスタント・ハッキング -- www.python.jp

PythonプログラミングTips -- www.python.jp

お気楽 Python/Tkinter 入門

紫藤さんのページ -- PythonとTkinterの説明のサンプルが素晴らしい。

Cafe de Paison -- Python, Tkinter と PyQt の説明が

GUI Programming with Tkinter

ぐうたらの部屋 プログラミング部 -- FTP, コマンド系、numpy, matplotlibも


良いもの。悪いもの。-- numpyや matplotlibなど
-- グラフの中に、グラフを書く。axesの意味が分かる例。

100 -- numpy, Tkinter, matplotlib など

ひきメモ -- 文字列操作

2009年10月7日水曜日

if not L:

これは、真値テスト。以下の場合に、真となる。

- None
- False
- 数値型におけるゼロ。例えば 0 、 0L 、 0.0 、 0j 。
- 空のシーケンス型。例えば '' 、 () 、 [] 。
- 空のマッピング型。例えば {} 。

ここに、良い説明があった。

すぐに忘れる脳みそのためのメモ http://jutememo.blogspot.com/2008/10/python-2-if-not-l.html

2009年10月5日月曜日

if __name__ == '__main__':

人のPythonコードを読むと、以下のif文が良く出てくる。

if __name__ == '__main__':

調べてみると、
へたれプログラマーな日々 http://d.hatena.ne.jp/s-n-k/20080512/1210611374

みんなのPythonにも書いてあった(汗)。

このif文をファイルに書いておくと、モジュールとしてインポートされたときは、実行されない。しかし、このファイルを単体として直接実行した場合に、(要は、コマンドラインから、このファイルを実行)、実行される。
モジュール単体をテストするときに、使えるようです。

2009年8月30日日曜日

リストの重複の除く

リストの要素の重複を除く場合は、setが便利
>>> freq_input = [10812, 10713, 10061, 10812, 10812]
>>> freq_list = set(freq_input)
>>> freq_list
set([10713, 10812, 10061])


リストにリストが入っている場合は、setが使えないので、

>>> freq_sc_input = [[10812, 1], [10812, 2], [10713, 1], [10812, 1]]
>>> freq_sc_list = []
>>>
>>> for i in freq_sc_input:
... if i not in freq_sc_list:
... freq_sc_list.append(i)
...
>>> freq_sc_list
[[10812, 1], [10812, 2], [10713, 1]]

2009年8月22日土曜日

みんなのPython、で勉強スタートです。

本屋さんで、買ってしまった、みんなのPython無駄にしないように、早速 お勉強スタート!!
みんなのPython サポートページ




早速、正誤表にない間違えが、、、以下に書いておく
-----------------------------------
p.66
a[:3] <---- 最初(0番目)から2番目まで リストのスライス、nからmの場合は、a[n, m+1]

p.72
>>> board = [[0, 0, 0, 0, 0, 0, 0, 0], <----- 0番目のリスト
... [[0, 0, 0, 0, 0, 0, 0, 0], <----- 1番目のリスト

p.73
>>> board[3][2] = 2 <------- 縦4, 横3の座標に、、、
>>> board[3][3] = 2 <------- 縦4, 横4の座標に、、、

p.108
(以後8まで繰り返し)

-----------------------------------
ついでに、Python(x,y) もダウンロード Python(x,y) ver.2.1.14は、 Python2.5.4をベースのパッケージソフトウェアです。