第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