SQLメモ

hackmemo

personal memo for SQL and RDBMS

Read On →

Makeメモ

hackmemo

Memo for Makefile

Read On →

python flaskのメモ

hackmemo

python flask

Read On →

pythonのロギングに関するメモ

hackmemo

Memo for python logging

Read On →

Translate snakemake

hack チュートリアルを翻訳しました Snakemakeは主にバイオインフォマティクスに使われるパイプライン作成用ツールです。 翻訳をGithubに載せました。 こちらからどうぞ

++ Categories = [“hack”, “memo”] Description = “Memo for python” Tags = [“python”] date = “2016-01-24T15:14:58+09:00” title = “pythonメモ” draft = false +++ 基本事項 print('hello,world!') ()でくくらないとpython3ではエラーになる。 複数の変数に同じ値を代入するには a = b = c = ("hoge", fuga) Noneは特別なデータ型 print 以下のようにしてフォーマットする python3ではformatを使用するのがベター myvar = "hogehoge" print("my variable is %s" % myvar) 辞書をフォーマットするときは少し特殊で mydict = {"hoge":a, "piyo";b} print("Hello! %(hoge)d %(piyo)d" % {'hoge':a, 'piyo':b}) str.format()を用いてもよい(format関数を参照) 基本演算子 type(1) … intを返す isinstance(1, int) … Trueを返す 11/2 … 5.5 11//2 … 6 11%2 … -11//2 … -6 ** … べき乗 組み込み型 色々あるが、特に大事なのは3つ リスト …[]配列ともいう タプル … () Cでいうstructに近い 集合 … {} dictionaryとも タプルはデータの追加や削除が行えない。集合は数学の集合と同じで、同じ値のデータが複数代入されても1つしか残らない。 tuple()やlist()でそれぞれの型を変換できる tuple a, b = ("A", "B")でまとめて代入できる A = ("hoge", "fuga") tupleの作成 実は()は必要ない A = "hoge", "fuga" インデックスで参照できる点はリストと同じだが、代入はできない A[0] … hogeが出力 名前付きタプル 通常のタプルのふるまいに加えて、オブジェクトのようにchainメソッドで参照することができる。collectionsモジュールをimportすること import collections Point = namedtuple('Point3d', 'x y z') point = Point(10, 20 ,30) point # => Point3d(x=10,y=20,z=30) 通常のようにpoint[0]で参照することもできるしpoint.xで参照することもできる 構造体(struct)を作るときに便利 タプルの技 (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) それぞれの曜日名に数字を代入 dictionary perlで言うハッシュ d["key"]でkeyに対応する値を取得できる d = {'a' : 'apple', 'b' : banana, 'c' : orrange} # keyを取得 for k in d: print k # keyとvalueの両方を取得 for k, v in d.items(): #iteritemsでもいいらしい、違いは不明 print k, '-->', v keyとvalueの候補が既にjリストで存在する場合は以下のようにitertools.izipで簡単に結合できる itertools.izipはpython3ではzipに統一された names = ['a', 'b', 'c'] fruits = ['apple', 'banana', 'orrange'] d = dict(izip(names, colors)) 辞書のメソッド setdefault() … difaultdictを使用しなくても、これでデフォルトの値を設定することができる sef group_by(dict): d = {} for k, v in dict.iteritems(): d.setdefault(k, []).append(v) #kが存在しなければ、[]を設定したうえでvをappendする return d dictを等分割する from itertools import islice def split_dict(data, SIZE=10000): it = iter(data) for i in range(0, len(data), SIZE): yield {k:data[k] for k in islice(it, SIZE)} list perlでいう配列、[]内に複数の要素を書くことで作成する。 スライス 配列の一部を除いた配列を返す。タプルの操作と全く同様。(extend、appendを除く) mylist = ['A', 'B'] mylist.append('C') #Cを追加 mylist.extend(['D', 'E']) #別のリストと結合 mylist = mylist + ['D', 'E'] #同上 appendで複数項目のリストを追加すると、リストの中身ではなくlistオブジェクトそのものが追加される 注意: result = list1.extend(list2)とするとresultにはNoneが入る!!! Read On →