Effective Python(10): 序列数据尽量用enu

2019-10-04  本文已影响0人  warmsirius

一、range函数迭代序列

在一系列整数上面迭代时,内置的range函数很有用。

例1:按位生成小于264的随机整数:

from random import randint

random_bits = 0
for i in range(64):
    if randint(0, 1):
        random_bits |= 1 << i  # 优先计算 <<(左移)运算,然后计算|(按位或)运算
        
print(random_bits)

# 8218395160303362446

例2:直接迭代列表
迭代序列式数据结构,可以直接在上面迭代:

flavor_list = ['vanilla', 'chocoloate', 'pecan', 'strawberry']
for flavor in flavor_list:
    print("%s is delicious" % flavor)

# vanilla is delicious
# chocoloate is delicious
# pecan is delicious
# strawberry is delicious

当迭代列表时,通常还想知道当前元素在列表中的索引。

flavor_list = ['vanilla', 'chocoloate', 'pecan', 'strawberry']
for i in range(len(flavor_list)):
    flavor = flavor_list[i]
    print("%d: %s" % (i+1, flavor))

# 1: vanilla
# 2: chocoloate
# 3: pecan
# 4: strawberry
flavor_list = ['vanilla', 'chocoloate', 'pecan', 'strawberry']
for i, flavor in enumerate(flavor_list):
    print("%d: %s" % (i+1, flavor))

# 1: vanilla
# 2: chocoloate
# 3: pecan
# 4: strawberry

二、enumerate函数

生成器每次产生一对输出值,其中,前者表示循环下标,后者表示从迭代器中获取到的下一个序列元素

本例从1开始计数

flavor_list = ['vanilla', 'chocoloate', 'pecan', 'strawberry']
for i, flavor in enumerate(flavor_list, 1):
    print("%d: %s" % (i, flavor))

# 1: vanilla
# 2: chocoloate
# 3: pecan
# 4: strawberry

三、要点

上一篇 下一篇

猜你喜欢

热点阅读