2008年11月25日火曜日

filter, map, リストの内包表現

filter, map, リストの内包表現の自分的まとめ。
以下のコードで list1, list2, list3 で得られる結果は同じ。
コード的には、list1, list2 の方が list3 より綺麗に見えるけど、
性能的には list3 が早いような気がするけど、いまいち iterative を
理解できてないから、実際の所はよくわからず。。。

list1, list2 は、filter するために list を全部なめて、
その後に map なり、内包表現なりで filter 済みのリストを
再度なめることになりそうな気がする一方、list3 は明らかに
list を一回なめてるだけなはず。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#

import random

class Element:
""" """
def __init__ (self, id):
""" """
self.__id = id

def __del__ (self):
""" """

def id (self):
""" """
return self.__id

def main():
list = []
for id in range(20000):
elem = Element(random.randint(1, 100000000))
list.append(elem)

list1 = map(lambda x: x.id(), filter(lambda x: x.id() % 2, list))
list2 = [x.id() for x in filter(lambda x: x.id() % 2, list)]
list3 = []
for x in list:
if not x.id() % 2:
continue
list3.append(x.id())
print list1
print list2
print list3

#-----------------------------------------
if __name__ == "__main__":
main()

0 件のコメント: