Python 3.6.1 官方文档练习——初入江湖(三)

一个人的口味要宽一点、杂一点,
"南甜北咸东辣西酸",
都去尝尝。
——汪曾祺
1
一种生成列表的简洁方法——列表推导式。
应用程序通常会从一个序列的每个元素的操作结果生成新的列表,或者生成满足特定条件的元素的子序列。
如果有数学基础,可以很明显的看出来有点类似一个复合函数,g(list2)=g(f(list1)).
例如,假设我们想要创建一个列表 squares(平方):

再看一个例子,用列表推导式输出满足条件的坐标:

需要注意的是:要处理两个表达式或者是两个变量(专业术语是元组形式)一定要用括号括起来。

表达式可以是一个列表推导式。

2
del 语句——可以从列表中根据索引而不是值来直接删除一个元素。
而上一期中介绍的 pop()方法则会先返回你删掉的元素,再删除:

下面是 del,就会悄无声息的删除掉你切出来的元素:


3
元组是由逗号分割开的若干值,如下面的 t:

元组输出的总是带着括号的,输入时如果没有混淆的情况下是不需要带的。
例如下面的 u 就必须带括号:


[这里的错误提示:
“ 类型错误:‘元组’对象不支持单个元素赋值 ”]
但是可以通过以下这种方式读取元组中每个元素的值(数量要和元素数相符):

4
集合(set)
集合具有无序性、确定性和互异性。
在 Python 中,集合的基本用途有成员测试和消除重复的条目。
我非常喜欢用 list = list(set(list)) 来对列表去重然后再回复列表形式。
集合对象还支持并集、交集、差和对称差等数学运算。
[注意:若要创建一个空的集合你必须使用 set(),不能用{}(会创建字典)。]
下面上例子:

[对应确定性,即要么在集合内,要么不在]
一些集合运算:

5
字典(dictionary)
理解字典的最佳方式是把它看做无序的(键:值)集合,要求是键必须是唯一的(在同一个字典内)。
一对花括号将创建一个空的字典:{}。
花括号中由逗号分隔的键:值对将成为字典的初始值;
输出字典时也是按照这种方式输出。
下面是电话本的小例子:

用 dict(key = value,...)创建简单字典。

6
遍历
1)用 enumerate 函数可以同时输出列表的索引和元素本身

后续学习中更常用的两种遍历方法:
一种方法是直接将 i 赋值为列表中的每个元素
另一种方法是:
2)zip 函数可以一次遍历两个列表:

3)sorted 函数对序列进行排序:

4)字典的遍历

5)有时遍历的同时会有一些操作,那么可以用 一个新的列表或字典 来装它,这样会避免操作改变了原始的序列,或者避免一些丢失。

解释一下 NaN :
一开始看着还以为是小黄人的外星语,搜了一下维基百科:NaN(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。
比如说,"math.isnan(value)" 中的 value 如果是非数字的话,返回值为真,所以最后得到的新序列中,是没有 "float('NaN')" 的。
pandas 在读取表格中不存在的值时,会替代成为 NaN
。
NaN
并不等于 ''
(中间无空格),后者相当于有值只是值为空。不同编程语言表达同一个意思的符号可能是相似但是有区别的。如 python 里用 None 去表示什么也没有,SQL 里面用 NULL 表示。具体情况需要具体分析。
往期推荐:
初入江湖(二)
https://xie.infoq.cn/article/f9fa345db5386bb4033130a8f
初入江湖(一)
版权声明: 本文为 InfoQ 作者【Sicolas Flamel】的原创文章。
原文链接:【http://xie.infoq.cn/article/97e6aa43dd6dc1404e7ba790b】。文章转载请联系作者。
评论