💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 概述 for循环在python中是一个通用的**序列迭代器**:可以遍历任何**有序序列内**对象内的元素。 通用的序列迭代器,用于遍历任何有序序列对象内的元素,字符串,列表,元组,字典,其他内置可迭代对象。 for循环会使用**迭代协议**来遍历迭代对象中的每一项,使用对象的__next__()方法,捕捉到**StopIteration**停止循环。 >[info]`for循环的运算速度快于while` ### 一般格式 ```python for expression in iterable: suite1 else: suite2 ``` expression一般是一个单独的变量,或是一个变量序列,一般以元组形式给出 如果循环正常退出,则会执行else语句 ### 文件扫描 #### 将整个文件读取为字符串 ``` fd = open('test.txt','r') print(fd.read()) ``` #### 逐个字符读取 使用read(1)一次读取一个字符,一次只在内存中加载一个字符 ``` fd = open('test.txt','r') while True: char = fd.read(1) if not char: break print(char) ``` 使用read()会一次性把文件加载至内存,浪费资源 ``` for char in open('test.txt','r').read(): print(char) ``` #### 逐行读取文件 使用while进行逐行读取 ``` fd = open('test.txt','r') while True: line = fd.readline() if not line: break print(line) ``` 使用for进行逐行读取,此处readlines方法会将整个文件以行为元素组成列表,并且一次性加载至内存。 ``` for char in open('test.txt','r').readlines(): print(char) ``` 使用for进行逐行读取,此处使用文件迭代器,每次迭代的时候读取一行。 ``` for char in open('test.txt','r'): print(char) ``` **总结** * 按字符读取使用while循环 * 按行读取使用for循环 ### 循环的编写技巧 #### 循环计数器range range常用在for循环中来产生索引,也可用在任何需要整数列表的地方。 #### 非完备遍历:range和分片 在遍历是跳过一些元素 `range(0,10,2)` #### 修改列表:range ``` L = [1, 2, 3, 4] for i in range(len(L)): L[i] += 1 ``` 使用列表解析,会重新形成一个列表,不没有在原处进行修改 `[x+1 for x in L]` #### 并行遍历:zip和map ``` L1 = [1, 2, 3, 4] L2 = [5, 6, 7, 8] list(zip(L1, L2)) ``` `list(map(ord, 'spam'))` #### 使用zip构建字典 ```python for (k, v) in zip(keys, values): d[k] = v ``` #### 产生偏移和元素:enumerate range可以产生字符串中元素的偏移值, enumerate产生偏移和元素 offset,item ### 隐性迭代工具 1. 列表解析 2. map, reduce和filter函数