雲雀は高く空を舞い このページをアンテナに追加 RSSフィード

「ひよこは高く空を舞い」について

2009-10-14

json memo json memo - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - json memo - 雲雀は高く空を舞い json memo - 雲雀は高く空を舞い のブックマークコメント

適当に

要素はリスト[]、辞書/オブジェクト/ハッシュ{}、数値、文字列、logical、null。

例)

[1, 2, 3,

"food":"リンゴ",

"status":

{"はらへ":"超腹へ", "健康":"良好"},

"記念日":

[2005,10,7]

]

シンタックスチェック

firefox firebugのコンソールで var x=なんちゃら、とか書いて実行する事でJSONのシンタックスチェック可能

matlabの構造体の書き出しに使えそういや使う

(目的)

過去クロールデータ(matlab)のサルベージ

matlab struct -> json -> sqlite3/python

[]リスト内包表記とλ式 リスト内包表記とλ式 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - リスト内包表記とλ式 - 雲雀は高く空を舞い リスト内包表記とλ式 - 雲雀は高く空を舞い のブックマークコメント

Pythonのリスト内包表記が便利だ。すごく便利。

内包表記について

x = [1,2,3,4,5,6,7,8]という配列があった時に、それぞれの数値を2乗した新しい配列を作るというとき、プリミティブにするんだったらfor文を使って次のように書く(かな)

x = [1,2,3,4,5,6,7,8]
y = []
for t in x:
  y.append(t**2)

これをリスト内包表記によるとこうなる

x = [1,2,3,4,5,6,7,8]
y = [t**2 for t in x]

print y
[1, 4, 9, 16, 25, 36, 49, 64]

[処理 for (xの中のそれぞれの要素)]シンプル。

処理系と処理内容によってfor文よりもだいぶ早い&シンプルにかけるという事でお気に入り。

ちなみに、matlabだとこう

y = x.^2

if文と組み合わせる

例えばさっきのxにたいして、奇数だけ取り出したいときは末尾にif文を書くと、条件が真となる項に対して処理が行われる

x = [1,2,3,4,5,6,7,8]
y = [t**2 for t in x if t%2==1]

print y 
[1, 9, 25, 49,]

条件分岐はどうするの?

ただ、内包表記中にif分は使えてもif else..の三項演算子は使えない(のかな)xの項が3以下の時と3より大きいときの処理を分けたいとかは、以下のようにしても文法エラーになってしまう

y = [t**2 for t in x if t<4 else t+1]

こういうときはラムダ式の出番、かな。

f = lambda x: 1 if x < 4 else 2
# xが3以下の時1を返してそうでないとき2を返す
y = [f(t) for t in x]

print y
[1, 1, 1, 2,2, 2, 2, 2]
f = lambda x: x**2 if x < 4 else x + 1
y = [f(t) for t in x]

print y
[1, 4, 9, 5, 6, 7, 8, 9]

イテレータ内包表記

[]のかわりに()を使うとイテレータを返す


in Python 3

python3では、内包表記はリストの他にセットとディクショナリにも適用できるみたい

>>> [ n*n for n in range(5) ] 
[0, 1, 4, 9, 16] 
>>> { n*n for n in range(5) } 
{0, 1, 4, 16, 9} 
>>> { n: n*n for n in range(5) } 
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16} 
トラックバック - http://chick.g.hatena.ne.jp/allegro/20091014
テクノラティプロフィール