07 | 修炼基本功:条件与循环(下)_编程

条件与循环的复用

你好,我是悦创。

前面两部分讲了条件与循环的一些基本操作,接下来,我们重点来看它们的进阶操作,让程序变得更简洁高效。

在阅读代码的时候,你应该常常会发现,有很多将条件与循环并做一行的操作,例如:

  •  
 expression1 if condition else expression2 for item in iterable

将这个表达式分解开来,其实就等同于下面这样的嵌套结构:

  •  
 for item in iterable:     if condition:         expression1     else:         expression2

 

而如果没有 else 语句,则需要写成:

  •  
 expression for item in iterable if condition

举个例子,比如我们要绘制 y = 2*|x| + 5 的函数图像,给定集合 x 的数据点,需要计算出 y 的数据集合,那么只用一行代码,就可以很轻松地解决问题了:

  •  
 y = [value * 2 + 5 if value > 0 else -value * 2 + 5 for value in x

再比如我们在处理文件中的字符串时,常常遇到的一个场景:将文件中逐行读取的一个完整语句,按逗号分割单词,去掉首位的空字符,并过滤掉长度小于等于 5 的单词,最后返回由单词组成的列表。这同样可以简洁地表达成一行:

  •  
 text = ' Today,  is, Sunday' text_list = [s.strip() for s in text.split(',') if len(s.strip()) > 5] print(text_list) ['Today', 'Sunday']

当然,这样的复用并不仅仅局限于一个循环。比如,给定两个列表 x、y,要求返回 x、y 中所有元素对组成的元祖,相等情况除外。那么,你也可以很容易表示出来:

  •  
 [(xx, yy) for xx in x for yy in y if xx != yy]

这样的写法就等价于:

  •  
 l = [] for xx in x:     for yy in y:         if xx != yy:             l.append((xx, yy))

熟练之后,你会发现这种写法非常方便。当然,如果遇到逻辑很复杂的复用,你可能会觉得写成一行难以理解、容易出错。那种情况下,用正常的形式表达,也不失为一种好的规范和选择。

总结

  • 在条件语句中,if 可以单独使用,但是 elif 和 else 必须和 if 同时搭配使用;而 If 条件语句的判断,除了 boolean 类型外,其他的最好显示出来。

  • 在 for 循环中,如果需要同时访问索引和元素,你可以使用 enumerate() 函数来简化代码。

  • 写条件与循环时,合理利用 continue 或者 break 来避免复杂的嵌套,是十分重要的。

  • 要注意条件与循环的复用,简单功能往往可以用一行直接完成,极大地提高代码质量与效率。

07 | 修炼基本功:条件与循环(下)_编程_02