• 第10条:尽量用enumerate取代range


    核心要点:

    (1)enumerate函数提供了一种精简的写法,可以在遍历迭代器时获知每个元素的索引。

    (2)尽量用enumerate来改写那种将range与下标访问相结合的序列遍历代码。

    (3)可以给enumerate提供第二参数,以指定开始计数时所用的值(默认为0)

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

    对于字符串列表这样的序列式结构,可以直接在上面迭代。

    >>> name_list = ['kebi','maoxian','xiaoniao','xingye']
    >>> for name in name_list:
    ...     print("%s is very handsome" % name)
    ... 
    kebi is very handsome   #科比是最帅的
    maoxian is very handsome   #毛线是最帅的
    xiaoniao is very handsome
    xingye is very handsome

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

    例如,要个每个人加上一个序号,就可以用range来实现。

    >>> for i in range(len(name_list)):
    ...     name = name_list[i]
    ...     print('%d:%s' % (i+1,name))
    ... 
    1:kebi
    2:maoxian
    3:xiaoniao
    4:xingye

    与单纯迭代name_list或是单纯使用range的代码相比,上面这段代码有些生硬。

    我们必须获取列表长度,并且通过下标来访问数字,这种代码不便于理解。

    python提供了内置函数enumerate(枚举)函数,以解决此问题。enumerate可以把各种迭代器包装为生成器,以便稍后产生输出值。

    生成器每次产生一堆输出值,其中,前者表示循环下标,后者表示从迭代器中获取到的下一个元素。这样写出来的代码会非常的简洁。

    >>> for i,name in enumerate(name_list,1):
    ...     print('%d:%s'% (i,name))
    ... 
    1:kebi
    2:maoxian
    3:xiaoniao
    4:xingye

    文章摘抄于Brett Slatkin的《编写高质量Python代码的59个有效方法》,仅作为个人学习使用,如有侵权请告知,将及时删除,如果觉得有益,请购买原版书籍,知识需要传递和支持,谢谢。

  • 相关阅读:
    JavaWeb(一)
    有趣的天平秤假币问题
    栈应用——逆波兰式表达式的值
    栈应用——最长括号匹配
    倾力总结40条常见的移动端Web页面问题解决方案
    Emmet:HTML/CSS代码快速编写神器
    我的 Github 个人博客是怎样炼成的
    解决mac下atom安装插件失败问题
    Github建站全攻略
    OS X快捷键最最齐全版(官方版)
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/8018371.html
Copyright © 2020-2023  润新知