2013年3月2日土曜日

開発環境

『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のIV部(関数)の17章(関数に関する高度なテクニック)練習問題6.を解いてみる。

その他参考書籍

6.

コード(BBEdit)

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

# mapは引数に関数を渡す必要がある
# python 3.xではmapはリストではなくmapオブジェクトを返す
# (python 2.xではmapはリストを返す)
a = map(lambda x: x*x, range(10))
b = [x * x for x in range(10)]
for x in [a,b]:
    print("{0}: {1}".format(x, type(x)))
    for i in x:
        print(i)

# リスト内包表記では、map関数を使う場合に比べて、ifステートメントを使ったりして
# より複雑なことができる(ただ、複雑で読みにくい場合はコードの詠みやすさとパフォーマンス
# のバランスが大切。forループの方が読みやすい。リスト内包表記の方が速い。)
c = [x for x in range(10) if x % 2 == 0]
print(c)

# リスト内包表記とforループでリストの作成の速度の比較
import time
n = 1000000
start = time.time()
d = [x for x in range(n)]
t1 = time.time() - start
print("リスト内包表記: {0}秒".format(t1))
start = time.time()
e = []
for x in range(n):
    e.append(x)
t2 = time.time() - start
print("for loop: {0}秒".format(t2))

入出力結果(Terminal)

$ ./sample.py
<map object at 0x10e256b10>: <class 'map'>
0
1
4
9
16
25
36
49
64
81
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]: <class 'list'>
0
1
4
9
16
25
36
49
64
81
[0, 2, 4, 6, 8]
リスト内包表記: 0.10324287414550781秒
for loop: 0.2505049705505371秒
$

0 コメント:

コメントを投稿