Python列表解析式的正确使用方式(一)
先来逼逼两句:
Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法。在本文中,将会展示列表解析式
(List Comprehension)。我们将讨论如何使用它?什么时候该或不该使用它?
列表解析式的优势
- 比循环更节省时间和空间。
- 需要更少的代码行。
- 可将迭代语句转换为公式。
如何在 Python 中创建列表
列表解析式是一种基于现有列表创建列表的语法结构。让我们来看看创建列表的不同实现
循环
循环是创建列表的传统方式。不管你使用什么样的循环。要以这种方式创建列表,您应该:
实例化一个空列表。
循环遍历一个可迭代的(如 range)的元素。
将每个元素附加到列表的末尾。
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列表解析式的正确使用方式(一)的更多相关文章
- Python列表解析式的正确使用方式
先来逼逼两句: Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法.在本文中,将会展示列表解析式 (List Comprehension).我们将讨论如何使用它?什 ...
- Python列表解析式的正确使用方式(二)
高级解析式 条件逻辑早些时候,我向您展示了这个公式: python学习交流群:660193417### new_list = [expression for member in iterable] 公 ...
- python列表解析式,字典解析式,集合解析式和生成器
一.列表解析式(列表推倒式): 功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表. 1 lst = [1, 3, 5, 8, 10] 2 ll = [x+x for x in ls ...
- [翻译]Python List Comprehensions: Explained Visually || Python列表解析式
原文1地址: http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/ 原文2地址: http://blog.tea ...
- Python 列表解析式竟然支持异步?
PEP原文:https://www.python.org/dev/peps/pep-0530 PEP标题:PEP 530 -- Asynchronous Comprehensions PEP作者:Yu ...
- Python - 列表解析式
列表解析——用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 例子一: map(lambda x: x**2, range(6)) [0, ...
- [python] 列表解析式的高效与简洁
方法一(列表解析式): list1 = ["abc","efg","hij"] list2 = [i[0] for i in list1] ...
- Python - 列表解析式/生成器表达式
列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...
- 以正确的方式开源 Python 项目
以正确的方式开源 Python 项目 大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清 晰和无痛.我不是 ...
随机推荐
- canvas 隐藏 踩坑
当我在把canvas绘制完成时,要把canvas隐藏起来.试了display 和 opacity 都不行. 然后我用了 position: absolute; left:1000px; top:0; ...
- 2021.05.14 tarjan
2021.05.14 tarjan 标准版tarjan 这里使用数组来模拟栈 void tarjan(int x){ ++ind; dfn[x]=low[x]=ind; stacki[++top]=x ...
- java的Integer中也会有缓存
在上篇<java的自动拆箱会发生NPE>博客中接收了java中的Integer中的自动拆箱产生的NPE,其实对于所有的包装类来说都是一样的,都会产生这样的问题,大家需要举一反三,做学问学知 ...
- JAVA 基础(1)开发环境的搭建以及开发工具的选择
我们现在还是在学习阶段因此我们不用配置那么多的jdk,配置一个jdk8就够应付日常的学习了.前面的文章我尽量写详细一些照顾刚入坑的朋友.后文还有教大家怎么使用企业版的idea. 一.开发环境的搭 ...
- [笔记] Powerful Number 筛
定义 Powerful Number(以下简称 PN)筛类似于杜教筛,可以拿来求一些积性函数的前缀和. 要求: 假设现在要求积性函数 \(f\) 的前缀和 \(F(n)=\sum_{i=1}^nf(i ...
- kernel UAF && tty_struct
kernel UAF && 劫持tty_struct ciscn2017_babydriver exp1 fork进程时会申请堆来存放cred.cred结构大小为0xA8.修改cred ...
- scrapy架构与目录介绍、scrapy解析数据、配置相关、全站爬取cnblogs数据、存储数据、爬虫中间件、加代理、加header、集成selenium
今日内容概要 scrapy架构和目录介绍 scrapy解析数据 setting中相关配置 全站爬取cnblgos文章 存储数据 爬虫中间件和下载中间件 加代理,加header,集成selenium 内 ...
- brew常用命令
Homebrew 常用命令 brew -help # 查看帮助命令 brew config # 查看配置信息 brew list # 查看已安装软件包列表 brew cleanup # 清理所有包的旧 ...
- 主管发话:一周搞不定用友U8 ERP跨业务数据分析,明天就可以“毕业”了
随着月末来临,又到了汇报总结的时刻. (图片来自网络) 到了这个特殊时期,你的老板就一定想要查看企业整体的运转情况.销售业绩.客户实况分析.客户活跃度.Top10 sales. 产品情况.订单处理情况 ...
- WC2021 题目清单
Day2 上午 <IOI题型与趣题分析> 来源 题目 完成情况 备注 IOI2002 Day1T1 Frog 已完成 IOI2002 Day1T2 Utopia IOI2002 Day1T ...