牛逼!Python的判断、循环和各种表达式(长文系列第②篇)(二)

简介: 流程控制是python语法很重要的一个分支,主要包括我们经常用到的判断语句、循环语句以及各种表达式,这也是上一篇文章没有介绍表达式的原因,在这篇文章中会更加系统全面的讲解这三方面的基础知识。

continue语句的作用就是表示继续执行下一次迭代,可以结合判断语句使用,在什么条件下继续执行,或者什么条件下跳出循环。、

In [20]: for i in range(2,7):
    ...:     if i%2==0:
    ...:         print('An even number',i)
    ...:         continue
    ...:     if i>4:
    ...:         print('beyond 4')
    ...:         break
    ...:
An even number 2
An even number 4
beyond 4

pass语句主要起到一个占位的作用,而有的语句后面是不能为空的,比如if、for、while,可以利用pass占位,不会发生报错。

In [1]: while True:
   ...:     pass

迭代器、生成器

我们通常接触到的迭代器有序列,比如字符串、列表等等,利用iter()方法可以构建一个迭代器,与之匹配的next()方法可以迭代返回迭代器内的值,并将返回值弹出迭代器。

In [1]: it = iter('python')
In [2]: print(it)
<str_iterator object at 0x00000187ADA75A00>
In [3]: next(it)
Out[3]: 'p'
In [4]: next(it)
Out[4]: 'y'

当next方法迭代到最后一个值时,继续调用next方法会弹出报错。当然也可以利用for循环迭代输出:

In [6]: for i in it:
   ...:     print(i)
t
h
o
n

如果你深入了解Python之后会发现生成器用起来会更加方便,结合函数即可。生成器的关键字为yield,生成器也具有next()方法,并且可以利用for循环迭代输出。

In [8]: def reverse(data):
   ...:     for i in range(len(data)-1,-1,-1):
   ...:         yield data[i]
In [9]: gen = reverse('mao')
In [10]: print(gen)
<generator object reverse at 0x00000187AD99FDD0>
In [11]: next(gen)
Out[11]: 'o'
In [12]: for i in gen:
    ...:     print(i)
a
m

用小括号括起来的一个表达式可以用来创建一个生成器,下面将讲述如何来书写各种的表达式。

In [14]: gen2 = (i for i in range(0,5))
In [15]: print(gen2)
<generator object <genexpr> at 0x00000187ADA18D60>

表达式

列表表达式

各种表达式为我们创建相关数据类型提供了一种更加简单的方法,首先是列表表达式,普通的方法是通过将一些操作应用于序列的每个成员并通过返回的元素创建列表,或者通过满足特定条件的元素创建子序列。比如我们想获取10以内的平方数,利用普通方法如下:

In [16]: squares = []
In [17]: for i in range(10):
    ...:     squares.append(i ** 2)
In [18]: squares
Out[18]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

但一行语句就足以囊括上面的内容,可见列表表达式的简洁性。

In [20]: squares = [x**2 for x in range(10)]
In [21]: squares
Out[21]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

上面这个列表表达式应该是比较简单的,我们还可以在表达式中加入判断语句作为筛选条件。

In [22]: list2 = [x*2 for x in range(10) if x*2>3]
In [23]: list2#0和2被过滤掉了
Out[23]: [4, 6, 8, 10, 12, 14, 16, 18]

在复杂一点的列表表达式就是嵌套类型的,但是这样的表达式缺点就是可读性不太好,因为你需要去思考他的一些细节,比如将一个23的矩阵转变为32的矩阵。

In [28]: mat = [[1,2,3],[4,5,6]]
In [29]: list3 = [[row[i] for row in mat] for i in range(3)]
In [31]: list3
Out[31]: [[1, 4], [2, 5], [3, 6]]

集合表达式

集合表达式与列表表达式有两处不同:

  • 1、集合表达式需要用{}
  • 2、集合表达式返回的是集合,所以会对元素去重
In [32]: set1 = {i for i in 'abcdddddd' if i not in 'abc'}
In [33]: set1
Out[33]: {'d'}

可以看到for语句中的字符串原本有很多d,经过条件过滤和集合去重最后只剩下了一个。

当然也可以通过set()方法将一个列表表达式转换为集合的形式。

In [34]: set2 = set([(x,y) for x in range(2) for y in range(2)])
In [35]: set2
Out[35]: {(0, 0), (0, 1), (1, 0), (1, 1)}

字典表达式

字典是python中很常用的一种数据类型,所以字典表达式也显得尤为重要。字典表达式同样也用{}构建,只不过表达式还要用(key:value对)的形式。

In [36]: dict1 = {x:x**2 for x in range(1,4)}
In [37]: dict1
Out[37]: {1: 1, 2: 4, 3: 9}

字典表达式也可以结合一些方法、语句实现更多的功能。

In [38]: dict2 = {x:len(x) for x in ['aa','bb','ccc']}
In [39]: dict2
Out[39]: {'aa': 2, 'bb': 2, 'ccc': 3}

利用items()方法很容易实现键值对转换,不过需要注意字典的键需要唯一。

In [40]: dict3 = {v:k for k,v in dict2.items()}
In [41]: dict3
Out[41]: {2: 'bb', 3: 'ccc'}

通过上面几个例子可以看到,表达式是由包含一个表达式的括号组成,表达式后面会跟一个for语句,之后还可以跟零或者多个for或if语句,结果最终会返回一个指定的数据类型,其中的元素是通过表达式依据后面的for和if语句计算而得出的。

相关文章
|
4月前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
本文介绍了Python中的循环语句,包括while和for循环的使用,range()函数的运用,以及continue、break和pass关键字的说明,同时提出了关于while循环是否能与成员运算符结合使用的思考。
53 1
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
|
29天前
|
人工智能 Python
[oeasy]python039_for循环_循环遍历_循环变量
本文回顾了上一次的内容,介绍了小写和大写字母的序号范围,并通过 `range` 函数生成了 `for` 循环。重点讲解了 `range(start, stop)` 的使用方法,解释了为什么不会输出 `stop` 值,并通过示例展示了如何遍历小写和大写字母的序号。最后总结了 `range` 函数的结构和 `for` 循环的使用技巧。
31 4
|
1月前
|
Python
Python编程中正则表达式的使用
【10月更文挑战第22天】正则表达式,一种强大的文本处理工具,在Python编程中有着广泛的应用。本文将介绍如何使用Python中的re库来使用正则表达式,包括如何创建、匹配、查找和替换字符串等。通过学习本文,你将能够掌握Python中正则表达式的基本使用方法。
|
2月前
|
Java 索引 Python
【10月更文挑战第19天】「Mac上学Python 30」基础篇11 - 高级循环技巧与应用
本篇将介绍更深入的循环应用与优化方法,重点放在高级技巧和场景实践。我们将讲解enumerate()与zip()的妙用、迭代器与生成器、并发循环以及性能优化技巧。这些内容将帮助您编写更高效、结构更合理的代码。
66 5
|
2月前
|
Python
Python 循环语句的高级应用与深度探索
本文深入探讨了Python中循环语句的高级应用,包括`for`循环遍历字典获取键值、同步遍历多个序列,以及`while`循环结合条件判断和异常处理。通过嵌套循环实现了矩阵乘法,并介绍了如何优化循环以提升程序性能。示例代码展示了这些技术的实际应用。
50 15
|
2月前
|
数据安全/隐私保护 Python
Python循环语句
【10月更文挑战第7天】
|
3月前
|
Python
Python中正则表达式(re模块)用法详解
Python中正则表达式(re模块)用法详解
40 2
|
3月前
|
Python
Python 中如何循环某一特定列的所有行数据
Python 中如何循环某一特定列的所有行数据
|
2月前
|
程序员 Python
Python中Lambda表达式的优缺点及使用场景
Python中Lambda表达式的优缺点及使用场景
26 0
|
2月前
|
存储 算法 API
Python学习五:函数、参数(必选、可选、可变)、变量、lambda表达式、内置函数总结、案例
这篇文章是关于Python函数、参数、变量、lambda表达式、内置函数的详细总结,包含了基础知识点和相关作业练习。
29 0