列表推导
如果需要生成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进行处理。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/187795.html