直接上代码:

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/07/24 16:23 import itertools
import sys
import time reps = 1000 # 测试重复次数
nums = 20000 # 测试时数字大小 def tester(func, *args): # 总体测试函数
start_time = time.time()
for i in xrange(reps):
func(*args)
elapsed = time.time() - start_time # 用time模块来测试,结束时间与开始时间差
return elapsed def while_statement(): # while循环实现
res = []
x = 0
while nums > x:
x += 1
res.append(abs(x)) def for_statement(): # for循环实现
res = []
for x in xrange(nums):
res.append(abs(x)) def generator_expression(): # 生成器实现
res = list(abs(x) for x in xrange(nums)) def list_comprehension(): # 列表生成式实现
res = [100]
res += [abs(x) for x in xrange(nums)] def map_function(): # 内置函数map实现
res = [100]
res += map(abs, xrange(nums)) def map_function2(): # 内置函数map实现
res = [100]
res.extend(map(abs, xrange(nums))) def map_function3(): # 内置函数map实现
res = [100]
itertools.chain(res, map(abs, xrange(nums))) if __name__ == '__main__':
print sys.version # 打印系统版本
tests = [
while_statement, for_statement,
generator_expression, list_comprehension,
map_function, map_function2,
map_function3
]
for test_func in tests: # 将待测函数放置列表中依次遍历
print test_func.__name__.ljust(20), ': ', tester(test_func) #

结果如下:

 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)]
while_statement : 2.53600001335
for_statement : 1.93700003624
generator_expression : 1.3639998436
list_comprehension : 1.06500005722
map_function : 0.90499997139
map_function2 : 0.899000167847
map_function3 : 0.824999809265

结论:

1)耗时:while > for > 列表生成式 > map函数;

2)连接list时,itertools的chain对象比直接+或者extand要快。

3)另外,以上range均使用xrange,相比range返回列表,xrange返回iterator, 实际测试表明,xrange比range快。

python 几种循环性能测试: while, for, 列表生成式, map等的更多相关文章

  1. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  2. python切片、迭代、生成器、列表生成式等高级特性学习

    python高级特性 1行代码能实现的功能,决不写5行代码.请始终牢记,代码越少,开发效率越高. 切片 当我们要取一个list中的前n各元素时,如果前n个少的话,我们还可以一个一个的取,但是若前n个元 ...

  3. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  4. Python函数篇:dict函数和列表生成式

    1.dict函数语法:dict()dict(**kwarg) dict(mapping, **kwarg) dict(iterable, **kwarg) 第一种:dict()构造一个空字典 h=di ...

  5. Python学习 Day 4 函数 切片 迭代 列表生成式 生成器

    定义函数 def my_abs(x):#求绝对值的my_abs函数 if x >= 0: return x else: return –x def nop():#空函数 pass#占位符 参数检 ...

  6. Python学习札记(十七) 高级特性3 列表生成式

    参考:列表生成式 Note 1.List Comprehensions,即列表生成式,是Python中内置的非常强大的list生成式. eg.生成一个列表:[1*1, 2*2, ..., 10*10] ...

  7. Python学习之==>内置函数、列表生成式、三元表达式

    一.内置函数 所谓内置函数就是Python自带的函数 print(all([0,2,3,4])) #判断可迭代的对象里面的值是否都为真 print(any([0,1,2,3,4])) #判断可迭代的对 ...

  8. python中的生成器,迭代器及列表生成式

    列表生成器:  即List Comprehensions. 在python中,可通过内置的强大有简单的生成式来创建列表.例如创建一个1到10的列表list [1, 2, 3, 4, 5, 6, 7, ...

  9. Python全栈之路----函数进阶----列表生成式

    列表生成式 现在有个需求,看列表[0,1,2,3,4,5,6,7,8,9],要求你把列表里每个值都加1,你怎么实现?你可能会想到两种方法. 二逼青年版 >>> a = [0,1,2, ...

随机推荐

  1. 使用Spring Animation的API创建动画

    pring Animation 是一种特殊的动画曲线,自从 iOS 7 开始被广泛应用在系统动画中. Spring Animation 是Linear(线性即匀速)动画.Ease-out(即动画减速地 ...

  2. crontab 定期拉取代码

    * * * * * cd /home/wwwroot/default/lion/ && /usr/bin/git pull origin 5hao >> /tmp/git. ...

  3. liunx系统下安装mysql数据库5.7.13版本

    一:在/usr/local目录下解压安装包

  4. [LeetCode] 9. Palindrome Number ☆

    Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negativ ...

  5. [USACO13NOV] Pogo-Cow

    https://www.luogu.org/problem/show?pid=3089 题目描述 In an ill-conceived attempt to enhance the mobility ...

  6. 「模板」 01 Trie实现平衡树功能

    不想多说什么了.费空间,也不算太快,唯一的好处就是好写吧. #include <cstdio> #include <cstring> const int MAXN=100010 ...

  7. consul windows安装

    Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开 ...

  8. asp.net RDLC报表入门

    Asp.net RDLC 报表入门 这几天帮给同事讲解Asp.net RDLC 报表方面的知识,顺便做个简单教程,在这里分享给大家. 由于图片多又大,写了一半,光上传图片就把我累个半死,所以我教把程放 ...

  9. bzoj 1577: [Usaco2009 Feb]庙会捷运Fair Shuttle——小根堆+大根堆+贪心

    Description 公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N.K(1<=K<=50000)群奶牛希望搭乘这辆公交车.第i群牛一共有Mi(1& ...

  10. 【BZOJ】1014 [JSOI2008]火星人prefix

    [算法]splay [题解]对于每个结点维护其子树串的hash值,前面为高位,后面为低位. sum[x]=sum[L]*base[s[R]+1]+A[x]*base[s[R]]+sum[R],其中su ...