列表推导式python菜鸟教程,Python列表推导式,并解释它的作用
python视频教程栏目介绍Python列表推导式的使用。
相关免费学习推荐:python视频教程
Python派生不适合初学者,因为它非常反直觉,即使对于其他编程语言背景的人也是如此。
当我们接触到List的使用时,学习的内容是分散的。所以我们缺乏一个关于如何在各种场景下使用List的知识体系。
本文提供了一些使用List的指南,尽可能地涵盖了所有方面。希望这篇文章能成为你的一站式实用手册。
使用建议
1.建议使用迭代法。
使用List最基本的方法是基于iterable对象创建List对象,iterable对象可以是任何可以迭代元素的Python对象。用法如下。
iterable中item的表达式]下面的代码显示了一个使用list相关技术创建List对象的示例。在这个例子中,我们定义了一个整数列表,基于这个对象,我们创建了一个保存每个数字的平方数和立方数的列表对象。
#创建一个整数列表
整数=[1,2,3,4,5,6]
#创建正方形和立方体列表
幂=[(x*x,pow(x,3))对于整数中的x]
打印(功率)
[(1,1),(4,8),(9,27),(16,64),(25,125),(36,216)]上面的例子使用List对象作为迭代器。要知道很多类型的对象都是可以迭代的,比如List、Set、Dictionary、String等等。其他数据类型,如pandas包中的范围、地图、过滤器、系列和数据框,是迭代的。下面的代码演示如何使用一些对象。
#使用范围对象
integer_range=range(5)
[x*x for x in integer_range]
[0, 1, 4, 9, 16]
#使用系列对象
进口熊猫作为pd
pd_series=pd。系列(范围(5))
打印(pd _系列)
0 0
1 1
2 2
3 3
4 4
dtype: int64
pd _ series中x的x * x
[0, 1, 4, 9, 16]2.如果只需要一些元素,应该使用条件语句。
假设您需要收集满足特定条件的元素并创建一个列表。相关语法如下所示。
【iterable if条件中item的表达式】if语句用于实现条件判断。下面的代码显示了这种用法的一个简单示例。
#同时创建一个整数列表
整数=[1,2,3,4,5,6]
#过滤出偶数,并创建这些偶数的平方列表
squares _ of _ evens=[x * x for x in integers if x % 2==0]
打印((偶数的平方))
[4, 16, 36]3.使用条件判断语句
还可以在列表中使用if-else形式的条件判断。语法如下。
iterable中item的if条件表达式else表达式1]这有点类似于前面的用法。不要混淆这两种用法。在这个例子中,条件语句本身是一个整体。下面的代码提供了一个示例。
#创建一个整数列表
整数=[1,2,3,4,5,6]
#遍历整数中的元素。如果是偶数,取平方数,存入一个新的列表
大型旅行车的
;>> # 如果是奇数,取立方数存入新的列表
>>> custom_powers = [x*x if x % 2 == 0 else pow(x, 3) for x in integers]
>>> print(custom_powers)
[1, 4, 27, 16, 125, 36]4.如果有嵌套结构,可以使用嵌套的循环
有可能可迭代对象中的元素自身也是可迭代的,尽管这种情况不太常见。如果你对嵌套的可迭代对象有兴趣,可以使用 for 来实现循环嵌套。语法如下。
[expression for item_outer in iterable for item_inner in item_outer]上面的代码展示了使用for实现嵌套循环的例子。# 与下面的代码等同
for item_outer in iterable:
for item_inner in item_outer:
expression
>>> # 创建一个包含元组的列表5.替换高阶函数>>> prices = [('$5.99', '$4.99'), ('$3.5', '$4.5')]
>>> # 获取元组中的每个价格,以此创建一个一维列表
>>> prices_formatted = [float(x[1:]) for price_group in prices for x in price_group]
>>> print(prices_formatted)
[5.99, 4.99, 3.5, 4.5]
有的人比较习惯函数式编程,比如使用高阶函数也是这种习惯的表现之一。特别说明一下,高阶函数是那些需要使用输入或输出参数的函数。在 Python 中,常用的高阶函数有 map() 和 filter()。
>>> # 创建一个 integer 类型的列表从上面的例子可以看出,使用 list 的某些特性比使用高阶函数更具有可读性,而且也能实现较复杂的嵌套结构。>>> integers = [1, 2, 3, 4, 5]
>>> # 使用 map 创建平方数列表
>>> squares_mapped = list(map(lambda x: x*x, integers))
>>> squares_mapped
[1, 4, 9, 16, 25]
>>> # 使用列表推导式创建平方数列表
>>> squares_listcomp = [x*x for x in integers]
>>> squares_listcomp
[1, 4, 9, 16, 25]
>>> # 使用 filter 取得 integers 中的偶数列表
>>> filtered_filter = list(filter(lambda x: x % 2 == 0, integers))
>>> filtered_filter
[2, 4]
>>> # 使用列表推导式取得 integers 中的偶数列表
>>> filterd_listcomp = [x for x in integers if x % 2 == 0]
>>> filterd_listcomp
[2, 4]
1.不要忘了定义构造函数
有人认为列表推导式很酷炫,是 Python 特有的功能,所以为了炫耀自己的 Python 水平,即使有更好替代方案也要使用它。
>>> # 使用 range 创建列表对象上述例子中,我们使用了 range 和 string,这两种数据结构都是可迭代的,list()构造函数可以直接使用 iterable 创建一个 list 对象。下面的代码提供了更合理的解决方案。>>> numbers = [x for x in range(5)]
>>> print(numbers)
[0, 1, 2, 3, 4]
>>> # 以一个字符串为基础,创建一个小写字母的字符列表
>>> letters = [x.lower() for x in 'Smith']
>>> print(letters)
['s', 'm', 'i', 't', 'h']
>>> # 使用 range 创建列表对象2.不要忘了生成器表达式>>> numbers = list(range(5))
>>> print(numbers)
[0, 1, 2, 3, 4]
>>> # 以一个字符串为基础,创建一个小写字母的字符列表
>>> letters = list('Smith'.lower())
>>> print(letters)
['s', 'm', 'i', 't', 'h']
在 Python 中,生成器是一种特殊的可迭代对象,它会延迟加载元素,直到被请求才会加载。这在处理大量数据时会非常高效,它能提升存储效率。相比之下,list 对象为了方便计数和索引,一次性创建所有的元素。所以跟生成器相比,在元素个数相同时,list 需要占用更多内存。
我们可以定义一个生成器函数来创建生成器。我们也可以使用下面的语句来创建生成器,这是一种称为生成器表达式的方法。
(expression for item in iterable)你可能会注意到,除了使用圆括号外,它的语法跟使用 list 的语句很相似。所以需要注意区分。
考虑下面这个例子。我们要计算前一百万个数字的平方和。如果使用 list 来实现,方法如下。
>>> # 创建列表对象 squares>>> squares = [x*x for x in range(10_000_000)]
>>> # 计算它们的总和
>>> sum(squares)
333333283333335000000
>>> squares.__sizeof__()
81528032
如上所示,list 对象占据 81528032 字节。我们考虑使用 generator 进行相同的操作,代码如下。跟使用 list 相比,使用 generator 内存开销小得多,只有 96 字节。原因很简单———— generator 不需要获取所有的元素。相反,它只需要获取各个元素在序列中的位置,创建下一个元素并呈现它,而且不必保存在内存中。>>> # 创建 generator 对象,保存每个数的平方数
>>> squares_gen = (x*x for x in range(10_000_000))
>>> # 计算它们的总和
>>> sum(squares_gen)
333333283333335000000
>>> squares_gen.__sizeof__()
96
结论
本文中,我们整理了 list 应用的一些关键要领。这些该做的和不该做的都非常清晰明了。我估计你会在合适的场景中用到它。下面是本文内容的小结。
使用迭代的方式。Python 中有许多类型的 iterable,你应当在掌握基础(list 和 tuple)的同时融会贯通。
使用条件判断语句。如果你对在 iterable 中筛选某些元素感兴趣,可以多多研究条件判断。
使用条件判断表达式。如果你需要有选择性地获取某些数据,可以使用条件判断表达式。
使用嵌套的循环。如果你要处理嵌套的 iterable,可以使用嵌套的循环结构。
用 list 替代高阶函数在很多情况下,可以用 list 替代高阶函数。
不要忘记 list 的构造函数定义 list 的构造函数,可以使用 iterable 创建一个 list 对象。如果你直接使用 iterable,推荐用这个方法。
不要忘了生成器表达式它的语法与 list 中的语法相似。在处理大量的对象时,这是一种节省内存开销的办法。list 和 generator 不同的是,为了日后的索引和访问, list 必须提前创建,如果元素个数很多,就会消耗很大的内存。以上就是Python 列表推导式使用的注意事项的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。