
2.4 Python编程技巧
2.4.1 Tab键自动补全程序
JupyterLab与Spyder、PyCharm等交互计算分析环境一样,都有Tab键补全功能,在Shell中输入表达式,按下键盘上的Tab键,会搜索已经输入的变量(对象、函数等)。
例如,输入“在2020年企业总的销售额为6965.18万元”,变量名为order_sales。

再输入“在2020年企业总的利润额为28.39万元”,变量名为order_profit。

在JupyterLab中输入“order”,然后按下键盘上的Tab键,就会弹出相关的变量,即可自动补全变量,如图2-7所示。

图2-7 自动补全变量
可以看出,JupyterLab呈现之前定义的变量及函数等,可以根据需要选择。当然,也可以补全任何对象的方法和属性。例如,企业在2020年不同区域的销售额的变量名为order_volume,在JupyterLab中输入“order_volume”,然后按下键盘上的Tab键,就会弹出相关的函数,即可自动补全函数,如图2-8所示。


图2-8 自动补全函数
2.4.2 多个变量的数值交换
如果我们需要交换变量a和b中的内容,则可以定义一个临时变量temp,先将变量a的值赋值给临时变量temp,再将变量b的值赋值给变量a,最后将临时变量temp的值赋值给变量b,完成两个变量值的交换。
代码如下:

代码输出结果如下所示。

这段代码在Python中其实可以被修改为下面的简洁形式,代码如下:

2.4.3 列表解析式筛选元素
如果我们需要把2020年企业各个季度的订单列表中的数值都加上60,则可以使用for循环语句遍历整个列表,代码如下:

代码输出结果如下所示。

上述需求还可以使用列表解析式的方法实现,代码如下。其中,方括号中的后半部分“for x in order_volume”是在告诉Python这里需要枚举变量中的所有元素,而其中的每个元素的名字叫作x,方括号中的前半部分“x + 60”则是将这里的每个数值x加上60。

代码输出结果如下所示。

列表解析式还有另外一个应用,就是筛选或过滤列表中的元素。例如,筛选出变量order_volume中大于200的数据,代码如下:

代码输出结果如下所示。

我们可以这样理解上述第2行代码的含义:新的列表由x构成,而x是来源于之前的变量order_volume,并且需要满足if语句中的条件。
2.4.4 遍历函数
在遍历列表时,如果希望同时得到每个元素在列表中对应的索引值,则可以使用enumerate()函数,它会在每一次循环的过程中提供两个参数,第1个i代表列表元素的索引值,第2个x代表列表中的元素。
例如,返回列表province的索引值和元素,代码如下:

代码输出结果如下所示。

我们还可以使用Python内置的sorted()函数对列表进行排序,它会返回一个新的并经过排序后的列表,代码如下:

代码输出结果如下所示。

在遍历元素时,如果加入reversed()函数就可以实现反向遍历,代码如下:

代码输出结果如下所示。

2.4.5 split()函数:序列解包
序列解包是Python 3.10版本之后才有的语法,可以使用这种方法将元素序列解包到另一组变量中。例如,变量province中存储了华东地区及其具体省市的名称,如果我们想要单独提取出地区名称和省市名称,并把它们分别存储到不同的变量中,则可以利用字符串对象的split()函数,把这个字符串按冒号分割成多个字符串,代码如下:

代码输出结果如下所示。

上述代码直接将split()函数返回的列表中的元素赋值给变量region和变量province_south。这种方法并不会只限于列表和元组,而是适用于任意的序列,甚至包括字符串序列。只要赋值运算符左边的变量数目与序列中的元素数目相等即可。
解包的使用还可以利用“*”表达式获取单个变量中的多个元素,只要它的解释没有歧义即可,“*”表达式获取的值默认为列表,代码如下:

代码输出结果如下所示。

上述代码获取的是右侧的剩余部分,还可以获取中间部分,代码如下:

代码输出结果如下所示。
