zoukankan      html  css  js  c++  java
  • 列表推导式

    列表推导

    如果需要生成10以内所有偶数的列表,该如何生成?

    传统方式

    1 numbers = range(10)
    2 size = len(numbers)
    3 evens = []
    4 i = 0
    5 while i < size:
    6     if i % 2 == 0:
    7         evens.append(i)
    8     i += 1
    9 print(evens)

    这种方式对于c语言或许可行,但是对于Python来说会使程序执行变慢,因为:

    1:它使解释程序在每一次循环中都要确定序系中的哪一个部分被修改。

    2:它使得必须通过一个计数器跟踪必须处理的元素。

    列表推导式

    1 evens = [i for i in range(10) if i % 2 == 0]
    2 print(evens)

    这种方式高效,简短,涉及的元素也更少,在更大的程序中,意味着引入的缺陷也更少,代码更容易阅读和理解。

    给列表中的每一个元素加上索引值,如何实现?

    Python风格的另一个典型的例子就是enumerate的使用。这个内建函数为在循环中使用序列时提供了更加便利的索引获取方式。

    1 i = 0
    2 seq = ["tom", "jack", "kelvin"]
    3 for s in seq:
    4     seq[i] = "%d:%s" % (i, s)
    5     i += 1
    6 print(seq)
    7 
    8 输出结果:['0:tom', '1:jack', '2:kelvin']

    上述代码可以用以下简短的代码代替:

    1 seq = ["tom", "jack", "kelvin"]
    2 for i, element in enumerate(seq):
    3     seq[i] = "%d:%s" % (i, element)
    4 print(seq)
    5 
    6 输出结果:['0:tom', '1:jack', '2:kelvin']

    还可以使用List comprehensions对其进行重构:

    1 def treatment(i, ele):
    2     return "%d:%s" % (i, ele)
    3 
    4 
    5 seq = ["tom", "jack", "kelvin"]
    6 seq = [treatment(i, element) for i, element in enumerate(seq)]
    7 print(seq)
    8 
    9 输出结果:['0:tom', '1:jack', '2:kelvin']

    最后这个版本更容易矢量化,因为它共享了基于序列中单个项目的小函数。

    总结:

    1:Python风格的语法意味着什么?

      Python风格的语法是一种对小代码模式最有效的语法。这个词也适用于诸如程序库这样高级的事物上。如果程序库能够很好的使用Python风格,它被认为是Python化的,在开发社区中,这个词被用于对代码块进行分类。

    2:每当序列中的内容要循环进行处理时,可以考虑使用List comprehensions进行处理。

  • 相关阅读:
    excel查找定位操作(for lutai)
    sqlserver检查sql执行时间
    excel操作for(lutai)
    android studio 3.0+发布签名apk注意的情况
    二维码
    svn文件合并
    生成wsdl代理c#代码
    LOCK_TIMEOUT
    支持chrome30下载文件
    miniui处理多重子表级联,一次性提交多表数据的ui要点
  • 原文地址:https://www.cnblogs.com/sun-10387834/p/10486774.html
Copyright © 2011-2022 走看看