Python遍历列表的5种方法从基础循环到高效技巧
你是不是刚学Python那会儿,看着列表里一堆数据不知道咋下手?别慌!今天咱们就用最接地气的方式,掰开了揉碎了讲讲??遍历列表的五大绝招??,保证你看完就能上手实操!
一、??最老实的土方法——for循环??
这绝对是新手村必备技能!就像用筷子夹菜一样基础:
python复制零食清单 = ["辣条", "薯片", "可乐"] for 零食 in 零食清单: print("今天吃:", 零食)
直接对着列表里的元素一个个点名,简单粗暴没套路。??适合场景??:不需要知道元素位置、单纯要处理每个内容的情况。
但你可别小看它!进阶玩法还能搭配else
:
python复制for 商品 in 空购物车: print("买买买!") else: print("钱包保住了!") # 列表为空时触发
??个人吐槽??:虽然这方法看着憨,但实际项目中80%的遍历都用它,毕竟代码不是越复杂越好嘛!
二、??手动挡的乐趣——while循环??
适合喜欢掌控节奏的老司机:
python复制待办事项 = ["写代码", "改bug", "喝咖啡"] 指针 = 0 while 指针 < len(待办事项): print("第",指针+1,"件事:",待办事项[指针]) pointer += 1
??优势??在于能随时踩刹车:
python复制while 指针 < len(待办事项): if 待办事项[指针] == "改bug": print("毁灭吧!") break # 遇到bug直接摆烂
??血泪教训??:网页里说的索引越界可不是吓唬人!上周我就因为忘了pointer +=1
,程序死循环把电脑卡爆了...
三、??自带导航仪——enumerate函数??
路痴救星来了!边遍历边报位置:
python复制快递列表 = ["手机", "键盘", "显卡"] for 序号, 快递 in enumerate(快递列表,1): # 第二个参数是起始编号 print("第",序号,"个快递是:",快递)
这招在处理排行榜、生成带序号报表时特好用。比用range(len())
高大上多了,关键还不用自己数数!
??性能实测??(来自网页的数据):
方法 | 10万次遍历耗时 |
---|---|
enumerate | 0.008秒 |
手动索引 | 0.012秒 |
没想到吧?内置函数居然比土方法还快! |
四、??一箭双雕——列表推导式??
把循环和创建新列表打包完成:
python复制原价表 = [100, 200, 300] 打折价 = [价格*0.8 for 价格 in 原价表 if 价格>150] # 结果:[160.0, 240.0]
注意这个if
不是装饰品!它能边遍历边筛选,像淘宝筛选商品一样方便。但要切记别用来替代普通循环:
python复制# 错误示范(会生成无用列表): [print(商品) for 商品 in 商品列表]
??内存警告??:处理百万级数据时,这种写法分分钟让你的内存爆炸!
五、??左右互搏术——zip函数??
约会神器!同时遍历两个列表:
python复制学生名单 = ["张三", "李四", "王五"] 考试成绩 = [90, 85, 95] for 姓名, 分数 in zip(学生名单, 考试成绩): print(姓名,"考了",分数,"分")
遇到长短不齐的列表也不怕,用itertools.zip_longest
就能自动补位。最近做数据匹配时就靠它搞定了几千条订单信息,比一个个写索引快多了!
??冷知识??:zip居然还能反向操作:
python复制打包 = zip(学生名单, 考试成绩) 姓名列表, 分数列表 = zip(*打包) # 拆包回原列表
说点掏心窝子的话
用了这么多年Python,最大的心得就是——??别跟内置函数较劲??!刚开始我也觉得enumerate
、zip
这些玩意儿花里胡哨,直到有次用纯手工索引搞出下标错位,debug到凌晨三点...
最近帮学妹改代码时发现,很多新手容易犯这两个错:
- 在循环里删列表元素(会导致跳过元素)
- 嵌套列表用单层循环(结果打印出来是子列表)
记住这两个保命口诀:
- ??改列表先拷贝??(用list.copy())
- ??套娃列表要双层循环??
最后送大家一句话:代码不是艺术品,??能跑起来的才是好代码??!下次遇到遍历问题,先把这五种方法挨个试试,总有一款适合你~
本文由嘻道妙招独家原创,未经允许,严禁转载