1. Iterable可迭代类型
在Python中,Iterable类型包括了很多内置的数据类型,如列表(list)、元组(tuple)、字符串(str)、字典(dict)、集合(set)、range()和文件对象等。
当我们对一个可迭代对象进行迭代时,通常会使用for循环。(可迭代对象内有多个元素)
2. for两种常见形式
在Python中,for循环是一个非常强大的控制流语句,它允许我们遍历一个序列(比如列表、元组、字符串等)或其他可迭代对象。以下是for循环的两种常见形式,分别用于遍历range对象和字符串。
首先是for i in range(...):
range是一个内置函数,用于生成一个数字序列。当for循环与range一起使用时,循环会按顺序遍历这个数字序列。这种形式通常用于需要循环一定次数或生成一系列连续数字的场景。
示例如下:
for i in range(5):
print(i) # 输出:0, 1, 2, 3, 4
# 使用range指定起始值和结束值(不包括结束值)
for i in range(2, 5):
print(i) # 输出:2, 3, 4
# 使用range指定起始值、结束值和步长
for i in range(0, 10, 2):
print(i) # 输出:0, 2, 4, 6, 8
然后是for r in 字符串:
当for循环与字符串一起使用时,它会遍历字符串中的每一个字符。每个字符都按在字符串中出现的顺序依次赋给循环变量。这种形式通常用于处理文本数据或需要遍历字符串中每个字符的场景。
示例如下:
s = "hello"
for r in s:
print(r) # 输出:h, e, l, l, o
# 可以结合字符串方法和循环进行更复杂的操作
for r in s:
if r == 'l':
print("Found an 'l'!")
# 输出:Found an 'l'!
# Found an 'l'!
在这两个示例中,for循环分别用于遍历数字序列(由range生成)和字符串中的字符。这两种形式都非常常见,并且在实际编程中经常一起使用,以处理各种数据结构和算法问题。
3. break与continue
在Python中,break和continue是for循环和while循环中常用的两个控制流语句,用于改变循环的正常流程。
首先来说break的作用:
break语句用于立即终止最内层的循环,不再执行循环体中剩余的语句,也不再进入下一次循环,而是直接跳转到循环后面的语句继续执行。
当break语句在循环内部被执行时,循环会立即停止,无论是否满足循环的条件。
示例:
for i in range(1, 6):
if i == 3:
break
print(i) # 输出:1, 2
# 因为当i等于3时,break语句被执行,所以循环被立即终止,不会输出3, 4, 5
然后来说continue的作用:
continue语句用于跳过当前循环的剩余部分,即不再执行continue语句后面的代码,直接开始下一次循环。但是,如果循环还有更多的迭代(即还没有达到循环的条件),那么下一次循环仍然会执行。
continue语句不会终止整个循环,只是跳过当前迭代中的剩余部分。
示例:
for i in range(1, 6):
if i == 3:
continue
print(i) # 输出:1, 2, 4, 5
# 因为当i等于3时,continue语句被执行,所以跳过了i等于3时的print语句,但是循环仍然会继续进行
这两个语句在循环中经常一起使用,用来实现复杂的控制逻辑。例如,在遍历一个列表时,你可能想跳过某些特定的元素,或者当满足某个条件时提前终止循环。break和continue就是用来实现这些功能的关键字。
4. for与else
在Python中,for-else语句是一个特殊的结构,它允许你在for循环正常完成后(即没有被break语句中断)执行一段额外的代码。如果for循环中的某个迭代通过break提前终止,那么else部分的代码块将不会被执行。
这种结构在搜索特定元素或检查是否所有元素都满足某个条件时特别有用。如果在循环中找到了元素或发现了不满足条件的元素,你可以使用break来提前退出循环;否则,如果循环正常完成(即遍历了所有元素而没有触发break),则执行else部分的代码。
下面是for-else语句的一个简单示例:
# 假设我们有一个列表,并想要搜索特定的元素
search_list = [1, 3, 5, 7, 9]
target = 6
found = False
for num in search_list:
if num == target:
found = True
print(f"找到了数字 {target}!")
break
else:
if not found:
print(f"在列表中未找到数字 {target}。")
# 如果找到了目标数字,会输出 "找到了数字 6!" 并跳过else块
# 如果没有找到,会输出 "在列表中未找到数字 6。"
在上面的示例中,我们遍历search_list来查找target。如果找到了target,我们设置found为True并打印消息,然后使用break退出循环。由于break被触发,else块中的代码不会执行。如果循环正常完成(即遍历了所有元素而没有break),则执行else块中的代码。
需要注意的是,for-else语句的else部分与循环外的普通else语句没有直接关系。它是专门为for循环设计的,以便在循环正常完成时执行一些额外的代码
5. 循环嵌套
循环嵌套是指在一个循环体内部再嵌套另一个或多个循环结构。外层循环变化一次,内层循环变化一轮。
下方是一个简单循环嵌套的示例:
打印一个正方形
for i in range(1, 10):
for j in range(1, 10):
print("*", end=" ")
print()
这个简单的循环嵌套一共循环9 * 9 = 81次,外层循环循环一次,内层循环就循环九次,最后打印出来一个是一个用*围成的正方形。
print中end属性默认为\n,为了实现每打印九个*循环换行一次的效果,我们先将end的值改为“ ”,代表每打印一个*就加两个空格,这样就能使打印出来的图形变成正方形。
总之,嵌套循环可以具有任意数量的层级,但通常我们会尽量保持嵌套层级较低,以提高代码的可读性和可维护性。过深的嵌套可能会使代码难以理解,并且容易引入错误。

2299

被折叠的 条评论
为什么被折叠?



