列表推导式

列表推导

如果需要生成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进行处理。

posted @ 2019-03-06 23:04  佛祖让我来巡山  阅读(641)  评论(0编辑  收藏  举报

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网