Python进阶语法之列表推导式

简介: Python进阶语法之列表推导式

Python进阶语法之列表推导式


Python列表推导式是Python中最有魅力的特性之一,它提供了一种优雅、简洁的方式来创建列表。这种语法不仅使得代码更加简洁,易读,而且在某些情况下还可以提高代码的执行效率。接下来,我们将一起深入探索Python列表推导式的魔力。



列表推导式基础


列表推导式(list comprehension)是一种创建列表的语法糖。基本形式如下:

[expression for item in iterable]


这个语句将iterable中的每个item代入expression得到新的元素,然后把这些元素组成一个新的列表。

例如,我们可以用它来创建一个由1到10的平方构成的列表:

squares = [x**2 for x in range(1, 11)]
print(squares)  # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]



添加条件过滤


我们还可以在列表推导式中添加条件过滤元素。语法如下:

[expression for item in iterable if condition]


这个语句将满足conditionitem代入expression得到新的元素,然后把这些元素组成一个新的列表。


例如,我们可以创建一个由1到10的所有奇数的平方构成的列表:

odd_squares = [x**2 for x in range(1, 11) if x % 2 == 1]
print(odd_squares)  # 输出: [1, 9, 25, 49, 81]

da0179b8adcb4de4960090261c4467ae.png



嵌套的列表推导式


列表推导式可以嵌套,形式如下:

[expression for item1 in iterable1 for item2 in iterable2]


这将对iterable1iterable2中的所有元素组合执行expression

例如,我们可以创建一个两个列表的所有元素的配对列表:

pairs = [(x, y) for x in [1, 2, 3] for y in ['a', 'b', 'c']]
print(pairs)  
# 输出: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]




列表推导式与性能


列表推导式不仅让代码更易读,更简洁,有时候还能提高代码性能。因为列表推导式是在Python的C实现层级完成的,所以它比等效的for循环快。


例如,考虑以下两种方式创建一个0到9999的平方列表:

# 方法一:for循环
squares1 = []
for x in range(10000):
squares1.append(x**2)
#方法二:列表推导式
squares2 = [x**2 for x in range(10000)]


在大多数环境下,方法二(列表推导式)的运行速度都会比方法一(for循环)快,因为列表推导式的执行是在Python的底层C语言中完成的,减少了Python层面的解释器开销。 但是,请注意,列表推导式也不是万能的。在处理大数据集或者进行复杂计算时,还应该考虑其他工具,例如NumPy和Pandas等。 ## 列表推导式与可读性 虽然列表推导式在许多情况下可以提高代码的可读性,但这并不意味着任何情况下都应该使用它。如果一个列表推导式过于复杂,它可能会使代码更难理解。在这种情况下,使用传统的for循环可能会更好。


以下是一个复杂的列表推导式例子:

result = [(x, y) for x in range(5) if x % 2 == 0 for y in range(5) if y % 2 == 1]


这个列表推导式生成了两个范围内的所有偶数和奇数的配对,但是理解这段代码需要一些时间。相比之下,下面的for循环版本的代码可能更容易理解:

result = []
for x in range(5):
    if x % 2 == 0:
        for y in range(5):
            if y % 2 == 1:
                result.append((x, y))




案例


  1. 将列表中的每个元素都平方
lst = [1, 2, 3, 4, 5]
squared_lst = [x**2 for x in lst]
print(squared_lst)   # 输出 [1, 4, 9, 16, 25]


cf56dfcdf3864a9a80e1e6358e5617d1.png



  1. 过滤掉列表中的偶数
lst = [1, 2, 3, 4, 5]
odd_lst = [x for x in lst if x % 2 != 0]
print(odd_lst)   # 输出 [1, 3, 5]

42e2b9b230d14ee484e0876d710c24db.png



3.从两个列表中取出所有可能的组合

lst1 = ['a', 'b']
lst2 = [1, 2]
combinations = [(x, y) for x in lst1 for y in lst2]
print(combinations)   # 输出 [('a', 1), ('a', 2), ('b', 1), ('b', 2)]

8b2d735c2eb04be4bc863ae7601ca8e8.png


4.将嵌套的列表展开为一个平面的列表

nested_lst = [[1, 2], [3, 4], [5, 6]]
flat_lst = [num for inner_lst in nested_lst for num in inner_lst]
print(flat_lst)   # 输出 [1, 2, 3, 4, 5, 6]

9f1013bb96ca45bfbe636b16f5c531bb.png


  1. 计算字符串列表中每个字符串的长度
lst = ['hello', 'world', 'python']
lengths = [len(x) for x in lst]
print(lengths)   # 输出 [5, 5, 6]

6e90103802a54576b6d2203c3cb4f685.png

总的来说,列表推导式是Python的一个强大工具,它可以帮助我们写出更优雅、更简洁的代码,同时还有可能提高代码的性能。但在使用列表推导式时,我们也应该关注代码的可读性,避免写出过于复杂的列表推导式。当推导式过于复杂时,不妨回退使用传统的for循环。


相关文章
|
8天前
|
Python
课时19:Python的基本语法
今天给大家带来分享的是 Python 的基本语法,分为以下六个部分。 1.在 Python 中严格区分大小写 2.Python 中的每一行就是一条语句,每条语句以换行结束 3.Python 中每一行语句不要过长 4.条语句可以分多行编写,语句后边以\结尾 5.Python 是缩进严格的语言,不要随便写缩进 6.在 Python 中使用#来表示注释
|
17天前
|
安全 数据处理 索引
深入探讨 Python 列表与元组:操作技巧、性能特性与适用场景
Python 列表和元组是两种强大且常用的数据结构,各自具有独特的特性和适用场景。通过对它们的深入理解和熟练应用,可以显著提高编程效率和代码质量。无论是在数据处理、函数参数传递还是多线程环境中,合理选择和使用列表与元组都能够使得代码更加简洁、高效和安全。
34 9
|
15天前
|
人工智能 数据库连接 开发工具
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
本文介绍了Python中`dir()`函数的使用方法及其作用。`dir()`可以列出当前作用域内的所有变量和成员,类似于`locals()`,但`dir()`不仅限于本地变量,还能显示模块中的所有成员。通过`dir(__builtins__)`可以查看内建模块中的所有内建函数,如`print`、`ord`、`chr`等。此外,还回顾了`try-except-finally`结构在数据库连接中的应用,并解释了为何`print`函数可以直接使用而无需导入,因为它位于`__builtins__`模块中。最后,简要提及了删除`__builtins__.print`的方法及其影响。
28 0
|
2月前
|
存储 开发者 Python
python基本语法
Python的基本语法简洁而强大,支持多种编程范式,包括面向对象编程和函数式编程。通过掌握变量和数据类型、操作符、控制结构、函数、类和模块等基本概念,可以有效地编写高效、可读的Python代码。无论是初学者还是经验丰富的开发者,Python都提供了丰富的工具和库来满足各种编程需求。
93 13
|
4月前
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
195 61
|
3月前
|
索引 Python
Python列表
Python列表。
64 8
|
3月前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
59 9
|
3月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
90 14
|
3月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
176 10
|
7天前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。

热门文章

最新文章