内置的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}')