一.什么是列表推导
# 例1
lst = []
for i in range(1, 11):
lst.append(i)
print(lst)
# 例2
lst = [i for i in range(1,11)]
print(lst)
从代码可读性的层面来讲,例2的可读性更好
结论:所以列表推导式是一种用来生成有规律的列表的一种可读性较好的方式
二.列表推导的两种模式
循环模式
symbols = '!@#$%^&'
codes = [ord(symbol) for symbol in symbols]
print(codes)
筛选模式~~~~
symbols = '$%^&*('
beyond_ascii = [ord(s) for s in symbols if ord(s) > 127]
print(beyond_ascii)
三.列表推导和filter、map的执行效率
列表推导是否执行效率低于filter、map呢?为了解决这个问题,我们使用timeit模块来对小段代码的执行效率进行测试。首先介绍两个常用方法:
def timeit(stmt="pass", setup="pass", timer=default_timer,
number=default_number, globals=None):
"""Convenience function to create Timer object and call timeit method."""
return Timer(stmt, setup, timer, globals).timeit(number)
def repeat(stmt="pass", setup="pass", timer=default_timer,
repeat=default_repeat, number=default_number, globals=None):
"""Convenience function to create Timer object and call repeat method."""
return Timer(stmt, setup, timer, globals).repeat(repeat, number)
timeit()返回的是方法执行number次花费的总时间
print(timeit.timeit(stmt="[i for i in range(100000)]", number=10000))
repeat()返回的是一个列表,包含每一次的执行时间
print(timeit.repeat(stmt="[i for i in range(100000)]", repeat=2, number=10000))
先测试一下列表推导和普通循环语句的执行效率