Python90-7 使用enumerate 替代range

第7条:使用enumerate 替代range

Item 7: Prefer enumerate Over range

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

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类的数据时,可以直接进行迭代:

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的索引。

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的作用:

it = enumerate(flavor_list)
print(next(it))
print(next(it))
>>>
(0, 'vanilla')
(1, 'chocolate')

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

for i, flavor in enumerate(flavor_list):
    print(f'{i + 1}{flavor}')
>>>
1: vanilla
2: chocolate
3: pecan
4: strawberry

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

for i, flavor in enumerate(flavor_list, 1):
    print(f'{i}{flavor}')

Things to Remember

  • • enumerate提供了简洁的语法来遍历迭代器及其索引。

  • • 优先使用enumerate而不是range+index

  • • enumerate的第二个参数可以指定开始计数的值(默认是0)


原文始发于微信公众号(一只大鸽子):Python90-7 使用enumerate 替代range

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/237486.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!