列表生成式
一个用来生成列表的特定语法形式的表达式。可以对一组元素进行过滤或得到对列表元素进行处理后得到的结果,可以快速的根据已存在的可迭代对象推导出一个新的list。
生成式的基本语法:
[expression for iter_var in iterable]
[expression for iter_var in iterable if cond_expr]
第一种语法:
首先迭代 iterable 里所有内容,每一次迭代,都把 iterable 里相应内容放到iter_var 中,
再在表达式expression 中应用该 iter_var 的内容,最后用表达式的计算值生成一个列表。
第二种语法:
加入了判断语句,只有满足条件的内容才把 iterable 里相应内容放到 iter_var 中,再在表达式expression 中应用该 iter_var 的内容,
最后用表达式的计算值生成一个列表。
先从简单的例子开始:
生成一个10个元素的数据,每个分别对应 1-10的两倍。
按照平常基本的思路,定义一个空列表 a ,使用for 循环遍历1-10,遍历出来的数乘 2 ,通过append 追加到列表中。
a = []
for i in range(1, 11):
a.append(i*2)
print(a)
使用列表生成式的做法:
list = [x*2 for x in range(1, 11)]
print(list)
看生成式的语法:x 先进行遍历 1- 10,表达式为 x*2。
带if判断:
对一个列表里面的数据筛选,比如:[1, 9, -2, 4, -5, 11, -7, 3],找出大于0的数,按普通思路可以for循环挨个判断,符合条件的放到新的列表。
l = [1, 9, -2, 4, -5, 11, -7, 3]
a = []
for i in l:
print(i)
if i > 0:
a.append(i)
print(a)
使用列表生成式:
l = [1, 9, -2, 4, -5, 11, -7, 3]
d = [x for x in l if x >0]
print(d)
由此可见,列表生成式代码简洁高效。
练习:
生成一个100以内所有偶数的列表?
l = [x for x in range(1, 101) if not x % 2]
print(l)
ll = [x for x in range(1, 101) if (x+1) % 2]
print(ll)