列表推导式
列表推导
如果需要生成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化的,在开发社区中,这个词被用于对代码块进行分类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~