1 # res=[] 2 # for i in range(1,34): 3 # res.append(str(i).zfill(2)) 4 # print(res) 5 6 res=[str(i).zfill(2) for i in range(1,34)] 7 print(res) 8 9 l = [i+1 for i in range(10)] 10 print(l)
摘自:https://www.cnblogs.com/yyds/p/6281453.htmlhtml
顾名思义,列表生成式就是一个用来生成列表的特定语法形式的表达式。app
[exp for iter_var in iterable]
工做过程:函数
至关于这样的过程:lua
L = [] for iter_var in iterable: L.append(exp)
[exp for iter_var in iterable if_exp]
工做过程:spa
至关于这样的过程:code
L = [] for iter_var in iterable: if_exp: L.append(exp)
[exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
工做过程:
每迭代iterable_A中的一个元素,就把ierable_B中的全部元素都迭代一遍。htm
至关于这样的过程:对象
L = [] for iter_var_A in iterable_A: for iter_var_B in iterable_B: L.append(exp)
其实列表生成式也是Python中的一种“语法糖”,也就是说列表生成式应该是Python提供的一种生成列表的简洁形式,应用列表生成式能够快速生成一个新的list。它最主要的应用场景是:根据已存在的可迭代对象推导出一个新的list。blog
咱们能够对几个生成列表的要求分别经过“不使用列表生成式”和“使用列表生成式”来实现,而后作个对比总结。内存
# 不使用列表生成式实现 list1 = list(range(3, 11)) # 使用列表生成式实现 list2 = [x for x in range(3, 11)]
# 不使用列表生成式实现 list3 = [] for n in range(3, 11): list3.append(2*n + 1) # 使用列表生成式实现 list4 = [2*n + 1 for n in range(3, 11)]
L = [3, 7, 11, 14,19, 33, 26, 57, 99] # 不使用列表生成式实现 list5 = [] for x in L: if x < 20: list5.append(x) # 使用列表生成式实现 list6 = [x for x in L if x > 20]
L1 = ['香蕉', '苹果', '橙子'] L2 = ['可乐', '牛奶'] # 不使用列表生成式实现 list7 = [] for x in L1: for y in L2: list7.append((x, y)) # 使用列表生成式实现 list8 = [(x, y) for x in L1 for y in L2]
[('香蕉', '可乐'), ('香蕉', '牛奶'), ('苹果', '可乐'), ('苹果', '牛奶'), ('橙子', '可乐'), ('橙子', '牛奶')] [('香蕉', '可乐'), ('香蕉', '牛奶'), ('苹果', '可乐'), ('苹果', '牛奶'), ('橙子', '可乐'), ('橙子', '牛奶')]
D = {'Tom': 15, 'Jerry': 18, 'Peter': 13} # 不使用列表生成式实现 list9 = [] for k, v in D.items(): list9.append((k, v)) # 使用列表生成式实现 list10 = [(k, v) for k, v in D.items()]
可见,使用列表生成式确实要方便、简洁不少,使用一行代码就搞定了。
我以为,你们应该已经发现这里说的列表生成式的功能与以前 这篇文章 中讲到的map()和filter()高阶函数的功能很像,好比下面两个例子:
L = ['TOM', 'Peter', 10, 'Jerry'] # 用列表生成式实现 list1 = [x.lower() if isinstance(x, str) else x for x in L] # 用map()函数实现 list2 = list(map(lambda x: x.lower() if isinstance(x, str) else x, L))
L = ['TOM', 'Peter', 10, 'Jerry'] # 用列表生成式实现 list3 = [x.lower() for x in L if isinstance(x, str)] # 用map()和filter()函数实现 list4 = list(map(lambda x: x.lower(), filter(lambda x: isinstance(x, str), L)))
对于大部分需求来说,使用列表生成式和使用高阶函数都能实现。可是map()和filter()等一些高阶函数在Python3中的返回值类型变成了Iteraotr(迭代器)对象(在Python2中的返回值类型为list),这对于那些元素数量很大或无限的可迭代对象来讲显然是更合适的,由于能够避免没必要要的内存空间浪费。关于迭代器的概念,下面会单独进行说明。