# python3小白课:for-in循环结构 ### for-in循环结构 for-in循环一般用来遍历范围、列表、元组和字典等可迭代对象包含的元素。可迭代的意思是它可以多次调用获取。比如你有一个箱子,里面有40个球球,我定义,每次我喊你的名字`小白同学`的时候,你就会从箱子里给我拿一个球球出来,下一次喊你还是一样的拿球球。那么这个箱子就是一个可迭代对象了。 > [!note] > > 而遍历的含义就是将所有的可能的内容都枚举出来,for-in循环更适合做这样一个事情。 for-in循环的一般语法结构为: ```python for 循环变量 in 字符串|范围|列表元组字典等: 执行体 ``` 循环变量我们不需要自己赋值,它在进入循环的时候,就会自动从后面的`字符串|范围|列表元组字典等`这些可迭代对象中取出1个来,赋值给循环变量,然后进入循环。这些可迭代对象通常的理解来说是有限的,因此会循环几次基本也是可定的。在执行体的部分我们可以执行代码,下一次进入循环时还会再次执行。在执行体的部分还能访问到`循环变量`的值,这样就可以做一些智能化的循环操作。 --- ### for-in小例子 为了大家更快速的理解,我们还是拿之前的重要的话说三遍的例子来讲一下,之前我们是使用while循环完成的代码,这节课我们用可能更为合适这个场景的for-in循环来试一下。 ```python # coding:utf-8 a = "我是小白,我很白,重要的话说三遍" for i in range(3): print(a) ``` 我们使用了range函数来生成了一个序列,它是可迭代对象,可以直接迭代使用。可以看到,这样写,我们的代码更为简洁。 --- ### for-in遍历列表和元组和字符串 列表、元组可以直接被遍历到,我们来看下例子,这时候,循环变量代表取出来的元素,根据需要,可以做进一步判断处理: ```python # coding:utf-8 a = [1, 2, 3] b = (1, 2, 3) for i in a: print(i) for i in b: print(i) ``` 字符串也能被遍历,遍历出来是每个字符: ```python # coding:utf-8 a = "我是小白,little bai" for i in a: print(i) ``` 你还可以使用索引来进行遍历,是另一种比较常见的写法: ```python # coding:utf-8 a = [1, 2, 3] b = (1, 2, 3) c = "我是小白,little bai" for i in range(len(a)): print(a[i]) for i in range(len(b)): print(b[i]) for i in range(len(c)): print(c[i]) ``` --- ### for-in遍历字典 字典是键值对的形式的,但我们可以通过`items()、keys()、values()`这几个命令来获取字典的情况: ```python # coding:utf-8 a = {"语文": 90, "数学": 89, "英语": 95} for key, value in a.items(): print("key: %s" % key) print("value: %s" % value) print("*" * 40) for key in a.keys(): print("key: %s" % key) print("*" * 40) for value in a.values(): print("value: %s" % value) print("*" * 40) ``` 通过字典,我们还可以统计列表中不同元素出现的次数。 ```python # coding:utf-8 a = [1, 2, 3, 4, 2, 3, 4, 2, 3, 4, 5, 6, 6, 4, 4, 5, 6, 7, 4] a_dict = {} for key in a: a_dict[key] = a_dict.get(key, 0) + 1 print("a_dict:", a_dict) ``` --- ### 在循环结构中使用else 循环结构也是支持else语句的,这是在python中相它编程语言一种比较特别的语法,在实际使用中,可能比较少使用吧。它使用后的逻辑为,当while或者for-in循环的循环体中没有遇到`break`语句强制退出时,会执行else代码段中的内容,但循环是通过`break`强制退出的话,那么就不会执行else代码段中的内容了。 我们来看个例子: ```python # coding:utf-8 i = 0 while i < 3: print(i) if i == 2: break i += 1 else: print("enter") print("*" * 40) i = 0 while i < 3: print(i) i += 1 else: print("enter") print("*" * 40) i = 0 for i in range(3): print(i) if i == 2: break else: print("enter") print("*" * 40) i = 0 for i in range(3): print(i) else: print("enter") ``` 如果有需要,那可以考虑使用这种结构,但我个人也极少会使用到。 ### 单词释义 | 单词 | 释义 | | ------ | ---------------------------------------------- | | for-in | for in两个单词组成的结构,意思为对于xx在xx里面 | | enter | 进入 |