1. 主页 > 大智慧

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万次遍历耗时
enumerate0.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,最大的心得就是——??别跟内置函数较劲??!刚开始我也觉得enumeratezip这些玩意儿花里胡哨,直到有次用纯手工索引搞出下标错位,debug到凌晨三点...

最近帮学妹改代码时发现,很多新手容易犯这两个错:

  1. 在循环里删列表元素(会导致跳过元素)
  2. 嵌套列表用单层循环(结果打印出来是子列表)

记住这两个保命口诀:

  • ??改列表先拷贝??(用list.copy())
  • ??套娃列表要双层循环??

最后送大家一句话:代码不是艺术品,??能跑起来的才是好代码??!下次遇到遍历问题,先把这五种方法挨个试试,总有一款适合你~

本文由嘻道妙招独家原创,未经允许,严禁转载