给妹子讲python-S01E04容器遍历和列表解析式
微信公众号: python数据科学家
知乎专栏: 《给妹子讲python》
https://zhuanlan.zhihu.com/c_147297848
前文传送门:
【要点抢先看】
1.遍历容器的基本方法
2.列表解析式和字典解析式的用法
【妹子问】前面三集我们学习了三种基本的容器,现在我有一个疑问,我们如何依次访问容器中的所有元素呢?
好问题,那这一集我们就初步学习如何遍历这些容器。
这个容易,python里也用for语句,但用起来比C语言里的语法更简洁一些,我们看看列表迭代的例子:
for x in [1,2,3]:
print(x)
1
2
3
字典因为涉及到键和值两个元素,稍微有一些不同,我们举两个常用的方法
第一种方法,通过遍历键来索引对应的值
D = {'a':1, 'c':2, 'b':3}
for k in D:
print('{}--->{}'.format(k,D[k]))
c--->2
a--->1
b--->3
再说说第二种方法。
用字典的items方法可以返回可迭代对象,通过对这个可迭代对象进行逐次迭代,就能获取其每一个键值对的元组,然后,即可同时取出键和值了。
D = {'a':1, 'c':2, 'b':3}
for k,v in D.items():
print('{}--->{}'.format(k,v))
c--->2
b--->3
a--->1
【妹子说】python中对于容器的遍历看上去很简洁,那这一集标题中的列表解析式是干什么用的?
列表解析式是python中的一个亮点语法。本质上就是用列表来构建列表,通过对已有列表中的每一项应用一个指定的表达式来构建出一个新的列表。列表解析式的优势是编码简单,运行起来很快。
列表解析式的三个核心要素是:
1.作用于输入序列的运算表达式;
2.对输入序列的循环表达式;
3.对输入序列的过滤条件,其中过滤条件是可选的。
【妹子说】别光说一二三,来举个例子说说
比如我们想要用列表a生成列表b,其中列表b中的每个元素都是a中对应元素的二次方
a = [1,2,3,4,5,6,7,8,9,10]
b = [x**2 for x in a]
print(b)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这个例子中,输入序列是a,运算表达式是x**2,循环表达式是for x in a。这个例子没有使用过滤条件,因此就使用了列表a中的所有元素来构造列表b,如果我们只想用列表a中所有能被3整除的元素来构造列表b呢,那就得用上过滤条件了。
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x**2 for x in a if x % 3 == 0]
print(b)
[9, 36, 81]
同样,对于字典也有同样的用法。
字典解析式,可以用字典以及列表等这些可以迭代的数据类型,来构造一个新的字典。
先看用字典构造字典
D1 = {'a': 1, 'b': 2, 'c': 3}
D2 = {k: v*2 for (k, v) in D1.items()}
print(D2)
{'b': 4, 'a': 2, 'c': 6}
再举一个用列表构造字典的例子:
D = {c:c*4 for c in ['a', 'b', 'c', 'd']}
print(D)
{'d': 'dddd', 'a': 'aaaa', 'c': 'cccc', 'b': 'bbbb'}
【妹子说】python容器遍历的语法看上去简洁而清爽。解析式呢,我感觉是遍历语法的一种更高级的展现和应用,使用简洁,而且可读性也比较强。这一集在前面几集的基础上,我感觉是一个总结和提升。
Python爱好者社区历史文章大合集:
Python爱好者社区历史文章列表(每周append更新一次)
关注后在公众号内回复“课程”即可获取:
小编的Python入门免费视频课程!!!
【最新免费微课】小编的Python快速上手matplotlib可视化库!!!
崔老师爬虫实战案例免费学习视频。
陈老师数据分析报告制作免费学习视频。
玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。