スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
.-- -- スポンサー広告 comment(-) trackback(-)

os.walk()

なかなか面白い関数を使ってみました。

os.walk()

ディレクトリの階層を順番に渡り歩いて処理をしてくれる。

#########################
import os

for root, dirs, files in os.walk(path, topdown=True)
#ループブロック内の処理

########################

ド素人の私が使ってみた感覚だと

階層を昇るか、下がるかの動きしかしてくれないので

階層を昇って、処理したい時はtopdown=Falseにしないといけないのは

「どっちにも動いてくれYO!」って思っちゃいました。

あとは、昇るか下るかスタートになるpathと同じ階層のディレクトリは

検出してくれにゃいよーな印象でした。

私のプログラミングが悪かったのかもしれないですけど。。。
スポンサーサイト
.13 2011 Python comment0 trackback0

Pythonメモ書き:TrueまたはFalseと解釈されるオブジェクト

Pythonでは、他の多くのプログラミング言語と同様に

整数0はfalse,

整数1はtrue

を表す。

その他にPythonでは

空のデータ構造はfalse,

一つでも要素を持つデータ構造はtrueと解釈される。

まとめると

●数値は0でなければ、trueと解釈される。

●その他のオブジェクトは空でなければtrueと解釈される。

また、PythonにはNoneという特殊なオブジェクトもある。

このオブジェクトは常にfalseと解釈される。

なんか、良く分からないけど

そのうち、使うようになれば分かってくるかも。。。(-_-;)
.23 2010 Python comment2 trackback0

Pythonメモ書き:比較とブール値

Pythonのオブジェクトはすべて、「比較」に対応できる!!

比較に使用するのが複合オブジェクトの場合は、

その全てが比較の対象になる!!

なので、ネストされているオブジェクトがあっても、その全てについて比較が行われます。


○オブジェクトが「同等」であるかの比較には、==演算子を使用します。

○オブジェクトが「同一」であるかの比較には、is演算を使用します。

==はオブジェクトの全ての要素を1つずつ順に同じであるか確認していきます。

isは2つがメモリ上の同じアドレスに存在する同一のオブジェクトであるかが確認されます。

ま、何はともあれインタラクティブシェルでやってみるのが早い!!


>>>L1 = [1, ('python', 3)] #2つのオブジェクトは別物だが、値は同じ
>>>L2 = [1, ('python', 3)]
>>>L1==L2, L1 is L2     #同等であるか、同一であるかの確認
(True, False)


では、ここでちょっと、私みたいな初心者向けの試み。

>>>S1 = 'perl'
>>>S2 = 'perl'
>>>S1 == S2, S1 is S2
(True, True)

そうそう、最初の例を見るとisを使ったらFalseになるっぺ!と思ったら残念!!

どうやら、Pythonでは、効率化のため、短い文字列はキャッシュされ、再利用されるということが原因らしい!!

つまり、'perl'という値をもつ文字列のオブジェクトは2つ作られているようにみえて

実は、1つしか作られていなく、変数S1とS2に共有されているらしい!!

だから、単純に文字列が短いことが原因なので


>>>S1 = 'python and perl'
>>>S2 = 'python and perl'
>>>S1 == S2, S1 is S2
(True, False)

って、なります。


では、次に「大きさ」の比較について試してみます。

>>>L1 = [1, ('python', 3)]
>>>L2 = [1, ('python', 2)]
>>>L1 < L2, L1 == L2, L1 > L2
(False, False, True)

ここで、オブジェクト比較の基本ルール
○数値は、数値そのものの大きさが比べられる。
○文字列は、1文字ずつ比べられ、アルファベット順で後に出てくる文字ほど大きいと見なされる。
○ディクショナリは、キーと値からなるリストとみなされ、要素が順に比較される。

ってなトコです。
.02 2010 Python comment0 trackback0

Pythonメモ書き:リファレンスとコピー

ちょっと、まだ理解しきれていないのですが。。。。

Pythonでは、変数がオブジェクトの「コピー」ではなく「リファレンス」を保持するので、

同じオブジェクトに対応する「リファレンス」が1つのプログラム中に複数ある場合には注意が必要。

なぜかというと、

オブジェクトが可変性である場合、

あるリファレンスでの変更が、他のリファレンスにも影響を及ぼしてしまうからです。

では、どうしたらこの問題を回避できるか??

→同じオブジェクトへのリファレンスを複数作るのではなく、
 オブジェクト自体がコピーされるように指示します。


△ダメな例
>>>X = [1, 2, 3]
>>>L = ['a', X, 'b']
>>>D = {'x':X, 'y':2}

この時、リストXの要素を変更すると。。。
>>>X[1] = 'python'
>>>L
['a', [1, 'python', 3], 'b']
>>>D
{'x':[1, 'python', 3], 'y':2}
>>>
要素の変更が全てのリファレンスに影響されてしまう~(汗)


そこで、コピーを作成して、他の変数への影響をなくします。

☆コピー作成方法☆

○スライシングの式で、開始位置、終了位置を指定せず、空白にする(L[:])。これでシーケンスのコピーが作られる。

○ディクショナリのcopyメソッドを使用する(D.copy())。これでディクショナリのコピーが作られる。

○listなどのビルトイン関数を使用する(list(L))。

○標準ライブラリのcopyモジュールを使用する(ネストされたオブジェクトもコピーできる)。

>>>L = [1,2,3]
>>>D = {'a':1, 'b':2}
>>>
>>>A = L[:]      #A=Lでない点に注意!
>>>B = D.copy()    #B=Dでない点に注意!
>>>
>>>A[1] = 'python'   #要素の変更
>>>B['c'] = 'perl'   #要素の追加
>>>L, D
([1,2,3], {'a':1, 'b':2})          #要素の変更の影響なし
>>>A, B
([1,'python',3], {'a':1, 'b':2, 'c':'perl'}) #要素の変更が反映されている


また、次の例のようにスライシングの式によって、リストがコピーされれば、
リファレンスへの影響を防ぐことができる。
>>>X = [1, 2, 3]
>>>L = ['a', X[:], 'b']
>>>D = {'x':X[:], 'y':2}
>>>
>>>X[1] = 'python'
>>>L
['a', [1, 2, 3], 'b']
>>>D
{'x':[1, 2, 3], 'y':2}

となって、変数Xの要素の変更が他の変数に反映されない!!

.01 2010 Python comment0 trackback0

Pythonメモ書き:複合型オブジェクトの類似点•相違点

複合型のオブジェクト=要素の集合からなるオブジェクト

つまり、リスト、ディクショナリ、タプルといった要素の集合体のお話です。

特徴を並べてみると

○リスト、ディクショナリ、タプルは、あらゆる種類(型)のオブジェクトを持つ事が可能。

○リスト、ディクショナリ、タプルでは、ネストを自由に組むことができる。

○リスト、ディクショナリは、サイズの拡張、縮小が可能。


プログラムの中で、

複数種のデータをひとまとめにして扱い、
データどうしの複雑な関係を表現したい

という時に便利。


ネストの「深さ」に制限がない!!

でも、今の私にはネストが深すぎると訳が分からなくなりそう。。。(汗)

だって、ネストが何重にも組まれている場合は

インデックスをいくつも指定しないとアクセス出来ないし。。。

例えば。。。。

タンパク質Aのデータで、

[(ID:1、国籍、性別)、{遺伝子配列、アミノ酸配列}]

最後の遺伝子配列とアミノ酸配列をディクショナリにしてみると

>>>A = [[(1, 'jap', 'male'), {'UUUUCUUAU':'FSY'}],
...   [(2, 'eng', 'female'), {'UUCUCUUAU':'FSY'}]]
>>>A[1]
[(2, 'eng', 'female'), {'UUCUCUUAU':'FSY'}]
>>>A[1][1]
{'UUCUCUUAU':'FSY'}
>>>A[1][1]['UUCUCUUAU']
'FSY'


みたいなっ!!!

って、あまり良い例じゃないなぁ~(汗)
.01 2010 Python comment0 trackback0
 HOME 

プロフィール

emi

Author:emi
日々、コンピューターとにらめっこしていた2010。
公の仕事に就くことを目指して教科書とにらめっこ2011,spring。
はたして2012は・・・

最新トラックバック

検索フォーム

ブロとも申請フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。