先来逼逼两句:

Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法。在本文中,将会展示列表解析式

(List Comprehension)。我们将讨论如何使用它?什么时候该或不该使用它?

列表解析式的优势

  • 比循环更节省时间和空间。
  • 需要更少的代码行。
  • 可将迭代语句转换为公式。

如何在 Python 中创建列表

列表解析式是一种基于现有列表创建列表的语法结构。让我们来看看创建列表的不同实现

循环

循环是创建列表的传统方式。不管你使用什么样的循环。要以这种方式创建列表,您应该:

  1. 实例化一个空列表。

  2. 循环遍历一个可迭代的(如 range)的元素。

  3. 将每个元素附加到列表的末尾。

Python学习交流Q群:660193417###
numbers = []
for number in range(10):
numbers.append(number) print(numbers)

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

在此示例中,您实例化了一个空列表 numbers。然后使用 for 循环迭代 range(10) 并使用 append() 方法将每个数字附加到列表的末尾。

map() 对象

map() 是创建列表的另一种方法。您需要向 map() 传递一个函数和一个可迭代对象,之后它会创建一个对象。该对象包含使用指定函数执行每个迭代元素所获得的输出。

例如,我们将呈现在某些产品的价格中增加增值税的任务。

VAT_PERCENT = 0.1  # 10%
def add_vat(price):
return price + (price * VAT_PERCENT)
Python学习交流Q群:660193417###
prices = [10.03, 8.6, 32.85, 41.5, 22.64]
grand_prices = map(add_vat, prices)
print(grand_prices)
gra

您已经构建了 add_vat() 函数并创建了 prices 可迭代对象。您将这两个参数都传递给 map() 并收集生成的 map 对象

grand_prices,或者您可以使用 list() 轻松地将其转换为列表。

输出:

<map object at 0x7f18721e7400>  # map(add_vat, prices)
[11.03, 9.46, 36.14, 45.65, 24.9] # list(grand_prices)

列表解析式

现在,让我们看一下列表解析式方法!这确实是 Python 风格,并且是创建列表的更好方法。为了弄清楚这种方法有多强大,我们用一个单行代码来重写那个循环示例。

numbers = [number for number in range(10)]
print(numbers)

输出

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

正如您所见,这是一种不可思议的方法!列表解析式看起来足够可读,您不需要编写更多代码,而只需一行。

为了更好地理解列表,请查看以下语法格式:

new_list = [expression for member in iterable]

哪种方法更有效

好的,我们已经学习了如何使用循环、map() 和列表解析式来创建列表,在您的脑海中可能会提出“哪种方法更有效”的问题。我们来分析一下吧!

import random
import timeit
VAT_PERCENT = 0.1
PRICES = [random.randrange(100) for x in range(100000)]
def add_vat(price):
return price + (price * VAT_PERCENT)
def get_grand_prices_with_map():
return list(map(add_vat, PRICES))
def get_grand_prices_with_comprehension():
return [add_vat(price) for price in PRICES]
Python学习交流Q群:660193417###
def get_grand_prices_with_loop():
grand_prices = []
for price in PRICES:
grand_prices.append(add_vat(price))
return grand_prices
print(timeit.timeit(get_grand_prices_with_map, number=100))
print(timeit.timeit(add_grand_prices_with_comprehension, number=100))
print(timeit.timeit(get_grand_prices_with_loop, number=100))

输出:

0.9833468980004909  # with_map
1.197223742999995 # with_comprehension
1.3564663889992516 # with_loop

正如我们现在所看到的,创建列表的最优的方法是 map(),排在第二位的是列表解析式,最后是循环。

但是,方法的选择应取决于您想要实现的目标。

•使用 map() 可以使你的代码更高效。

•使用循环可以使代码的思路展现更加清晰。

•使用列表解析式可以您使代码更加紧凑,且较高效。这是创建列表的最佳方式,因为这种方式可读性最强。

Python列表解析式的正确使用方式(一)的更多相关文章

  1. Python列表解析式的正确使用方式

    先来逼逼两句: Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法.在本文中,将会展示列表解析式 (List Comprehension).我们将讨论如何使用它?什 ...

  2. Python列表解析式的正确使用方式(二)

    高级解析式 条件逻辑早些时候,我向您展示了这个公式: python学习交流群:660193417### new_list = [expression for member in iterable] 公 ...

  3. python列表解析式,字典解析式,集合解析式和生成器

    一.列表解析式(列表推倒式): 功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表. 1 lst = [1, 3, 5, 8, 10] 2 ll = [x+x for x in ls ...

  4. [翻译]Python List Comprehensions: Explained Visually || Python列表解析式

    原文1地址: http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/ 原文2地址: http://blog.tea ...

  5. Python 列表解析式竟然支持异步?

    PEP原文:https://www.python.org/dev/peps/pep-0530 PEP标题:PEP 530 -- Asynchronous Comprehensions PEP作者:Yu ...

  6. Python - 列表解析式

    列表解析——用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 例子一: map(lambda x: x**2, range(6)) [0, ...

  7. [python] 列表解析式的高效与简洁

    方法一(列表解析式): list1 = ["abc","efg","hij"] list2 = [i[0] for i in list1] ...

  8. Python - 列表解析式/生成器表达式

    列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...

  9. 以正确的方式开源 Python 项目

    以正确的方式开源 Python 项目 大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清 晰和无痛.我不是 ...

随机推荐

  1. python3-认识内置对象,运算符,表达式

    1 . 认识内置对象 在python中一切皆对象, 整数,实数,复数,字符串,列表,元组,字典,集合,zip,  map, enumerate, filter , 函数 ,类 , 分类:内置对象,标准 ...

  2. python数据可视化-matplotlib入门(7)-从网络加载数据及数据可视化的小总结

    除了从文件加载数据,另一个数据源是互联网,互联网每天产生各种不同的数据,可以用各种各样的方式从互联网加载数据. 一.了解 Web API Web 应用编程接口(API)自动请求网站的特定信息,再对这些 ...

  3. Flatbuffers学习

    flatbuffers简介 FlatBuffers 是一个(二进制 buffer)序列化开源库,由 Google 开源现在它支持C++, C#, C, Go, Java, Kotlin, JavaSc ...

  4. 代码源 每日一题 分割 洛谷 P6033合并果子

    ​ 题目链接:切割 - 题目 - Daimayuan Online Judge 数据加强版链接: [NOIP2004 提高组] 合并果子 加强版 - 洛谷 题目描述 有一个长度为 ∑ai 的木板,需要 ...

  5. vue - vue基础/vue核心内容(终结篇)

    今天是vue基础.vue核心内容第三天,也是最后一天,后面开始进入组件化学习,整个基础内容以生命周期的结束而结束,不得不说,张天禹把这节课讲活了,开始觉得vue是一个有生命的东西,包括前面所说的很多脏 ...

  6. HMS Core分析服务助您掌握用户分层密码,实现整体收益提升

    随着市场愈发成熟,开发者从平衡收益和风险的角度开始逐步探索混合变现的优势,内购+广告就是目前市场上混合变现的主要方式之一. 对于混合变现模式,您是否有这样的困惑: 如何判断哪些用户更愿意看广告.哪些用 ...

  7. 【面试普通人VS高手系列】Spring中事务的传播行为有哪些?

    一个工作了2年的粉丝,私信了一个比较简单的问题. 说: "Spring中事务的传播行为有哪些?" 他说他能记得一些,但是在项目中基本上不需要配置,所以一下就忘记了. 结果导致面试被 ...

  8. drools中Fact的equality modes

    一.equality modes介绍 在drools中存在如下2种equality modes. 1.identity模式 identity:这是默认的情况.drools引擎使用IdentityHas ...

  9. SQL连接查询优化[姊妹篇.第五弹]

    上篇的sql优化篇章,更多偏向于优化的思想概念,先前抛出的4个优化问题中,篇幅过长,只对前两个问题进行了解析. 接下来我们一起来谈谈sql的连接查询优化,更偏向于实际运用,并对如下两个问题进行探讨.篇 ...

  10. java框架--快速入门

    spring快速入门    1.创建项目        1.1创建项目文件夹        1.2启动idea ->文件->打开->点击创建的项目文件夹        1.3右键创建 ...