首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python核心技术——循环与迭代是编程的基本功

循环语句

循环语句本质上就是遍历集合中的元素。和其他语言一样,Python 中的循环主要有 for 循环和 while 循环。前者用于执行逻辑循环;后者偏向对象内容迭代

比如,我们有一个列表,需要遍历列表中的所有元素并打印输出,代码如下:

l = [1, 2, 3, 4] # 从可迭代对象中依次获取元素 for item in l: print(item)

1 2 3 4

很多时候,for 循环和 while 循环可以互相转换,比如要遍历一个列表,我们用 while 循环同样可以完成:

l = [1, 2, 3, 4] # 基于特定条件,循环执行命令 length=len(l) while length>0: print(l[4-length]) length-=1

是不是很简单呢?其实,Python 中的数据结构只要是可迭代的(iterable),比如列表、元组、集合等等,对列表的遍历如下:

for a,b in [(1,2),(3,4)]: print(a,b)

1 2 3 4

注意:字典本身只有键是可迭代的,如果我们要遍历它的值或者是键值对,就需要通过其内置的函数 values() 或者 items() 实现。其中,values() 返回字典的值的集合,items() 返回键值对的集合。

遍历字典的键

d = {'name': '小码农和农夫', 'date': '2023-01-13', 'gender': '男'} for k in d: print(k)

name date gender

遍历字典的值

for v in d.values(): print(v)

小码农和农夫 2023-01-13 男

遍历字典的键值对

d = {'name': '小码农和农夫', 'date': '2023-01-13', 'gender': '男'} for k,v in d.items(): print('key: {}, value: {}'.format(k, v))

key: name, value: 小码农和农夫 key: date, value: 2023-01-13 key: gender, value: 男

你也许会问,有没有办法通过集合中的索引来遍历元素呢?当然可以,其实这种情况在实际工作中还是很常见的,甚至很多时候,我们还得根据索引来做一些条件判断。

我们通常通过 range() 这个函数,拿到索引,再去遍历访问集合中的元素。比如下面的代码,遍历一个列表中的元素,当索引大于 5 时,打印输出:

l = [1, 2, 3, 4, 5, 6, 7] for index in range(0, len(l)): if index > 5: print(l[index]

7

enumerate()

当需要同时索引和元素时,采用上面的方式会复杂一下。Python中内置了一个函数 enumerate(),用它来遍历集合,不仅返回每个元素,并且还返回其对应的索引。

l = [1, 2, 3, 4, 5, 6, 7] for index,item in enumerate(l): if index > 5: print('key: {}, value: {}'.format(index, item))

key: 6, value: 7

continue 和 break在循环语句的使用

continue,就是让程序跳过当前这层循环,继续执行下面的循环;

break 则是指完全跳出所在的整个循环体。

比如,给定两个字典,分别是产品名称到价格的映射,和产品名称到颜色列表的映射。我们要找出价格小于 10,并且颜色不是红色的所有产品名称和颜色的组合。如果不用 continue,代码应该是下面这样的:

# name_price: 产品名称 (str) 到价格 (int) 的映射字典 # name_color: 产品名字 (str) 到颜色 (list of str) 的映射字典 name_price={'A':10,'B':9,"C":11} name_color={'A':'红','B':"黄","C":"蓝"} for name, price in name_price.items(): if price >

name: B, color: 黄

而加入 continue 后,代码显然清晰了很多:

# name_price: 产品名称 (str) 到价格 (int) 的映射字典 # name_color: 产品名字 (str) 到颜色 (list of str) 的映射字典 name_price={'A':10,'B':9,"C":11} name_color={'A':'红','B':"黄","C":"蓝"} for name, price in name_price.items(): if price >= 10: continue if name not in name_color: print('name: {}, color: {}'.format(name, 'None')) continue for color in name_color[name]: if color == '红': continue print('name: {}, color: {}'.format(name, color))

name: B, color: 黄

我们可以看到,按照第一个版本的写法,从开始一直到打印输出符合条件的产品名称和颜色,共有 5 层 for 或者 if 的嵌套;但第二个版本加入了 continue 后,只有 3 层嵌套。

显然,如果代码中出现嵌套里还有嵌套的情况,代码便会变得非常冗余、难读,也不利于后续的调试、修改。因此,我们要尽量避免这种多层嵌套的情况。

小结

在 for 循环中,如果需要同时访问索引和元素,你可以使用 enumerate() 函数来简化代码。

写条件与循环时,合理利用 continue 或者 break 来避免复杂的嵌套,是十分重要的。

Python核心技术系列

Python核心技术——重新定义列表和元组

Python核心技术——重新认识字典和集合

Python核心技术——重新认识字符串

Python核心技术——JSON 序列化与实战

Python核心技术——输入和输出的秘密

Python核心技术——条件分支控制流

Python核心技术——异常处理与实战

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230116A03O2400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券