前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python90-7 使用enumerate 替代range

Python90-7 使用enumerate 替代range

作者头像
一只大鸽子
发布2022-12-06 09:26:42
3880
发布2022-12-06 09:26:42
举报
文章被收录于专栏:Python基础、进阶与实战

第7条:使用enumerate 替代range

Item 7: Prefer enumerate Over range

内置的range函数对于一堆int的循环很有用:

代码语言:javascript
复制
from random import randint
random_bits = 0
for i in range(32):
    if randint(0, 1):
        random_bits |= 1 << i
print(bin(random_bits))
>>>
0b11101000100100000111000010000001

当你想迭代list类的数据时,可以直接进行迭代:

代码语言:javascript
复制
flavor_list = ['vanilla', 'chocolate', 'pecan', 'strawberry']
for flavor in flavor_list:
    print(f'{flavor} is delicious')
>>>
vanilla is delicious
chocolate is delicious
pecan is delicious
strawberry is delicious

经常会需要迭代一个list,同时需要知道当前item的索引。

代码语言:javascript
复制
for i in range(len(flavor_list)):
    flavor = flavor_list[i]
    print(f'{i + 1}: {flavor}')
>>>
1: vanilla
2: chocolate
3: pecan
4: strawberry

这看起来就很冗长了。Python提供了内置的enumerate来解决这个问题。enumerate用惰性生成器包装迭代器。每次yields一个(index, value)形式的元组。下面解释了enumerate的作用:

代码语言:javascript
复制
it = enumerate(flavor_list)
print(next(it))
print(next(it))
>>>
(0, 'vanilla')
(1, 'chocolate')

enumerate 产出(yield)的对可以直接在for语句里解包:

代码语言:javascript
复制
for i, flavor in enumerate(flavor_list):
    print(f'{i + 1}: {flavor}')
>>>
1: vanilla
2: chocolate
3: pecan
4: strawberry

也可以在enumerate第二个参数指定开始计数的值

代码语言:javascript
复制
for i, flavor in enumerate(flavor_list, 1):
    print(f'{i}: {flavor}')

Things to Remember

  • • enumerate提供了简洁的语法来遍历迭代器及其索引。
  • • 优先使用enumerate而不是range+index
  • • enumerate的第二个参数可以指定开始计数的值(默认是0)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一只大鸽子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第7条:使用enumerate 替代range
  • Item 7: Prefer enumerate Over range
    • Things to Remember
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档