美文网首页
Effective Python(10): 序列数据尽量用enu

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

作者: warmsirius | 来源:发表于2019-10-04 17:20 被阅读0次

一、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

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

  • 方法一:利用range来实现
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
  • 方法二:numerate函数迭代序列
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函数

  • enumerate可以把各种迭代器包装成生成器,以便稍后产生输出值。

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

  • 可以指定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

三、要点

  • enumerate 函数提供了一种精简的写法,可以在遍历迭代器时获知每个元素的索引
  • 尽量用enumerate来改写那种将range与下标访问相结合的序列遍历代码
  • 可以给enumerate提供第二个参数,以指定开始计数时所用的值(默认为0)

相关文章

网友评论

      本文标题:Effective Python(10): 序列数据尽量用enu

      本文链接:https://www.haomeiwen.com/subject/pqhcpctx.html