问题
使用Python编程语言进行数据分析很有帮助,在某些情况下,比使用其他工具更有效。在这个系列教程中,我们将研究Python的功能。作为一种脚本语言,这里也可能需要重复某些代码块。这个过程允许您根据需要自动执行程序的控制流。
解决办法
为了迭代代码块,Python提供了一个特定的重复指令,称为“循环”结构。循环是一种方便而强大的方法,可以多次执行相同或不同的指令,而不是硬编码有限的重复次数。循环是在构建复杂算法和程序时非常有用的关键结构。当心——每个循环都有滑入无限执行状态的内在倾向。关于Python循环的这一点和其他点将在本Python教程中讨论。让我们从检查不同类型的循环开始。
While循环
while循环有一个包含条件表达式的主线、一个代码单元和一个可选的else语句(如果没有)break终止了之前的循环。
while <em>conditional_expression</em>: statement # bodyelse: # optional statement # runs only the loop has not been terminated with a <em>break</em>
正如你在上面的例子中看到的,while循环通常用在当某个条件为真时你想要迭代一个代码块的时候(事实上,注意自然语言和Python与while之间的相似性)。一旦条件表达式返回假结果,while循环就终止,程序在循环后继续执行代码。说明while构造的一个合适的例子是计算一个数的阶乘的程序。在数学中,一个数的阶乘 n 是产品所有小于或等于的正整数中 n 。下面是如何使用Python while循环实现这一点,同时将逻辑封装在函数中:
def calculate_factorial(n): result = 1 if n == 0 or n == 1: return result while n > 1: result = result * n n = n – 1 return result
1的情况很明显,而0的情况被定义为1。对于我们的程序来说,这两个都是需要条件表达式的特例。其余的逻辑如下。while循环不断地检查输入参数的值,而我们在循环的每一步都将该值递减1。这就是我们如何将结果变量乘以输入参数的下一个值。下面是该程序的运行情况:
为了说明else子句如何与while循环结合使用,请考虑以下示例:
limit = 5while limit > 0: print(limit) limit -= 1else: print(‘limit depleted’)
我们有一个简单的任务,检查一个变量是否在限制范围内,并显示该变量的当前值。结果如下:
值得注意的是,一旦我们基于定义的条件(变量> 0)退出while循环,控制就会跳转到else子句。
明确循环或Python For循环
也称为“for循环”,它们提供相同的结果,但与有限的项目集相结合。for循环语句的一般结构是:
for member in [a finite list of members]: statement # for loop body
列表必须是有限的,否则你会创建一个无限循环,这很少是你所需要的。另一个组件——“成员”变量——是迭代局部变量,记录需要循环的次数。例如:
tips = [‘Python’, ‘SQL’, ‘PowerBi’]for tip in tips: print(tip)
for循环通常用于从定义循环边界的变量列表中访问成员变量的索引:
for index in range(len(tips)): print(f'{index} – {tips[index]}’)
在结果中,您可以看到我们如何迭代每个元素,同时显示其索引和值:
注意range()函数,它是一个迭代器。如果您想以相反的顺序迭代某些内容,这也很有帮助:
num = int(input())for i in range(num, 0, -1): print(i)
你可以找到更多关于范围函数的细节在关于复杂数据类型的上一篇技巧文章中 .
这是for循环的另一个例子,说明了如何在循环体中使用变量赋值和条件表达式。假设我们需要在一系列数字中找到最大的数字:
def get_largest(list_of_numbers): largest_num = 0 for current_num in list_of_numbers: if current_num > largest_num: largest_num = current_num return largest_num
运行这段代码,您会得到:
嵌套循环
嵌套循环由一个外部循环组成,其主体包含一个或多个内部(嵌套)循环。他们是这样工作的:
每个嵌套循环总是从执行最外面的循环开始。循环变量被初始化,内部代码单元被执行。
接下来,内部循环以同样的方式执行:首先初始化它的循环变量,并根据它的定义递增(或递减)。
然后,在内部循环终止后,程序控制返回到父循环(可能是也可能不是最外面的循环)的主体。再次计算循环变量,并相应地继续执行。
整个序列重复进行,直到最外层的循环完成执行。
内部循环的行为可能类似于交叉连接命令。它们在获得两个集合的笛卡尔积时很有用。假设我们需要根据技术和难度快速生成提示标题:
tips = [‘Python’, ‘SQL’, ‘PowerBi’]levels = [100,200,400]for tip in tips: for level in levels: print(tip, level)
迭代每个提示的所有级别将产生两个集合的所有元素的组合
Python中的中断、继续和传递语法
这些运算符在处理循环时提供了更大的灵活性。
break 语句
Break语句终止直接包含循环。允许程序员在一个随机的地方退出循环,或者使“中断”成为一个逻辑结构的一部分,其真或假(布尔)结果将终止循环。例如,让我们研究另一种计算阶乘的方法:
def calculate_factorial(n): result = 1 while True: if not n > 1: break result = result * n n -= 1 return result
与前面的方法相比,这种方法有所不同:我们显式地创建了一个无限循环,如下所示True永远是真的。同时,我们确保在某个结果(负面的n或者n= 0)循环将终止。然后我们返回计算的结果。
连续语句
使用continue,您可以完成当前迭代的执行,并跳转到下一个迭代而不终止循环本身。换句话说,continue是的反义词break因为它指示控件转到直接包含的循环。假设我们想要计算字母S在MSSQLTips中的出现次数:
word = ‘MSSQLTips’count_s = 0for letter in word: if letter != ‘S’: continue else: count_s = 1
在…的帮助下continue我们确保变量count_s仅当S出现时,即当letter == S .
Pass语句
pass操作符适用于循环,但与break和continue不同,它也适用于其他构造。它实际上什么也不做,只是一种占位符。当您稍后将在代码单元中实现您的逻辑时,请使用它:
word = ‘MSSQLTips’for letter in word: pass
结论
在本教程中,我们介绍了Python中迭代的基础:while循环、for循环、嵌套循环及其固有的操作符break and continue。有了这些知识,我们可以着手构建更复杂的脚本和解决方案。