2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Amazonウィジェット

  • miniPC
  • 最近買った本
  • Raspberry Pi
  • クアッドコプター
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

« C# イベントを発生させる方法 | トップページ | C言語 CSVを読み込む関数をsscanfとstrchrで作ってみた。 »

2016年11月20日 (日)

python小技 map関数の小技

map関数を使うと、リストの各要素に対して同じ操作を行うことができます。
もっともよく使いそうなのは、CSVから数字を読んでその内容を処理したいとき。
for文で一個ずつint関数に突っ込んでもいいのですけど、内包表記とかmap関数を使うと下記のようにコンパクトに書けます。

たとえばファイルからCSVを一行読み込んだ、こんなリストaがあるとする。
a = ['12','13','14','15','16']

数値の左右にシングルクォーテーションがあるのは、ファイルから数字を読み取ったままだと文字列があるから。それをintに直したいとしたら、直した結果をnに入れていくようにして

n = [ ]
for t in a:
  n.append(int(t))
というようなことを書くこともできるが、map関数を使えば

map(int, a)
とすることもできる。
これは、第一引数が処理関数の指定。第二引数がリストで、リストの要素一個ずつを処理関数に渡してリストの内容を更新していくということ。
C言語で言うところの関数へのポインタを使っているのに近い。

map関数に加えて、lambda式を使えたらこんなこともできる。

map(lambda x: chr(x), range(0x30,0x30+10))
これは、
0x30から10個分のintのリスト要素それぞれを、ASCII文字に変換する。

処理した結果はこうなる。
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

ASCIIで0x30は数字の0という文字になるので、1個目が0で9まで続いている。

lambda x
というのがラムダ式というもので、引数xをとるlambdaという名前の関数があると考えればうまくいく。HPからコピペするだけだったり、丸覚えしようとするとうまくいかなかった。

確かタプルのリストを作ってそれをsort関数でソートしようとしたときに覚えて、
それから手になじむようになった。使い道が無いのに覚えようとすると、これはなかなかに難しい。


« C# イベントを発生させる方法 | トップページ | C言語 CSVを読み込む関数をsscanfとstrchrで作ってみた。 »

Python」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/518723/64347438

この記事へのトラックバック一覧です: python小技 map関数の小技:

« C# イベントを発生させる方法 | トップページ | C言語 CSVを読み込む関数をsscanfとstrchrで作ってみた。 »