目录
一、基础循环语句
在python中,我们最常用的循环语句有两种:while循环和for循环。那么对于这两种循环语句,你平时是如何选择的呢?
接下来,我来谈谈我个人的选择:给定数据集中循环用for,寻找目标结果时用while。以下来举例说明:
先作以下定义:
data = [0,1,2,3,4]
names = ['a','b','c','d','e']
1.for循环
以遍历names里面的所有元素为例,我们通常的方法有两种:
1.1直接进行元素遍历
for name in names:
print(name)
1.2使用range进行遍历
for i in range(len(names)):
print(names[i])
再扩展一种更python化的方法。
1.3使用enumerate()进行遍历
for i,name in enumerate(names):
print(i,name)
使用此方法可同时得到index(索引)和value(值),运行结果如下:
2.while循环
我介绍一下个人喜欢的while循环模式:
while True:
...
if ...:
break
...
可能有人会注意到这和C语言的do-while循环很类似,只有在达到 if 条件后才会 break 跳出循环。另外,你也可以添加continue调节循环进程。当然,在编写函数时,如果满足if 条件就可以结束运行该函数,并返回值的话,可以将 break 换为 return 。
举个例子,随机生成一个大于0.5的浮点数:
import random as rd
while True:
number = rd.random()
if number>0.5:
break
print(number)
感受到for循环和while循环的使用区别了吗?我们在names中进行遍历时用的是for循环,而在给定“生成一个大于0.5的浮点数”的目标时用的是while循环。
二、其他循环语句
有时,我们会遇到一些简单的需要实现的一些功能,如果使用以下方法可能会更方便:
1.列表推导式
这是一种非常简洁、易用的语法结构,它可以快速生成一个新的列表。
squares = [x**2 for x in range(5)]
print(squares)
2.map()函数
该函数可以将一个序列中的每个元素都传入一个指定的函数中进行处理,并将处理后的结果以列表形式返回。
squares = list(map(lambda x: x**2, data))
print(squares)
运行以上两个例子,都将会返回0~4各个数字的平方。
3.生成器表达式
它类似于列表推导式,但是列表推导式会直接将所有产生的结果保存在一个列表中并返回该列表,而生成器表达式则逐个生成值(即每次只产生一个结果)从而节省了内存空间,所以在处理大量数据时更为高效。若迭代每个值,可使用“next()”方法。
squares_g = (x*x for x in data)
print(next(squares_g),next(squares_g),next(squares_g),next(squares_g),next(squares_g))
4.filter()函数
它可以对列表中的元素进行条件选择,满足条件的才可保留。如以下保留大于2的数:
list(filter(lambda x: x > 2, data))