![](https://img.haomeiwen.com/i3093173/54c1e7152f18ac38.png)
上集回顾:
- 数值
- 字符串
- 列表
- 元组
- 集合
- 字典
温故而知新,上集小P复习了Python的基础数据类型,果然又发现了一个新的知识。
如果想要得到一个平方数列表,比如1到3的为[1, 4, 9],可以口算出来,但是到10,到100呢,再算和直接写出来序列就会很不优雅。这时候可能第一想法是用循环实现:
>>> squares = []
>>> for i in range(1, 11) :
... squares.append(i**2)
...
>>> squares
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
不错,完美实现,到100还是到1000都没有问题。就是生成一个列表竟然要3行代码,有点不够简洁。等后面学习了map和lambda表达时的话,其实可以1行代码搞定:
>>> s2 = list(map(lambda x: x**2, range(1, 11)))
>>> s2
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
是不是酷毙了,但是其实还有更简洁的方式:
>>> s3 = [x**2 for x in range(1, 11)]
>>> s3
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这就是列表推导式:对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表。也可以追加if子句进行条件判断,例如生成10以内的偶素列表:
>>> s4 = [x for x in range(1, 11) if x % 2 == 0]
>>> s4
[2, 4, 6, 8, 10]
所以列表推导式的内容可以表述为:一个表达式,后面为一个 for 子句,然后是零个或多个 for 或 if 子句。结果是由表达式依据 for 和 if 子句求值计算而得出一个新列表。举个例子,将两个列表中不相等的元素组合起来:
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
等同于:
>>> combs = []
>>> for x in [1, 2, 3]:
... for y in [3, 1, 4] :
... if x != y :
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
列表推导式还可以使用复杂的表达式和嵌套函数:
>>> from math import pi
>>> [str(round(pi, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']
本集总结:
- 列表推导式的一般形式
- 列表推导式的复杂表达式
下集见
网友评论