以下のコードで 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 件のコメント:
コメントを投稿