python推导式

推导式

推导式(英文名:comprehensions),也叫解析式,是Python的一种独有特性。

推导式是一种简洁高效的代码编写方式,可以用一行代码来创建列表、集合、字典等复杂数据结构。

1. 列表推导式(List Comprehension)

列表推导式用于生成新的列表。基本语法如下:

python 复制代码
new_list = [expression for item in iterable]
# 或者带有条件的:
new_list = [expression for item in iterable if condition]

示例:

python 复制代码
# 创建一个包含1到10的平方的列表  
squares = [x**2 for x in range(1, 11)]  
print(squares)  # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]  
  
# 创建一个包含1到10中所有偶数的列表  
even_numbers = [x for x in range(1, 11) if x % 2 == 0]  
print(even_numbers)  # 输出: [2, 4, 6, 8, 10]

2. 字典推导式(Dictionary Comprehension)

字典推导式用于生成新的字典。组成元素有两个:key 和 value,基本语法如下:

python 复制代码
new_dict = {key_expression: value_expression for item in iterable}
# 或者带有条件的:
new_dict = {key_expression: value_expression for item in iterable if condition}

示例:

python 复制代码
# 创建一个字典,键是1到5,值是对应键的平方  
squares_dict = {x: x**2 for x in range(1, 6)}  
print(squares_dict)  # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}  
  
# 创建一个字典,键是字符串列表中的每个字符串的长度,值是原始字符串  
words = ['apple', 'banana', 'cherry']  
word_lengths = {len(word): word for word in words}  
print(word_lengths)  # 输出: {5: 'apple', 6: 'cherry'}  
# 注意:如果有重复的键(如上例中的6),后一个值会覆盖前一个值

3. 集合推导式(Set Comprehension)

集合推导式用于生成新的集合(Python 3.9之后还引入)。基本语法与列表推导式类似,但使用大括号 {} 表示集合:

python 复制代码
new_set = {expression for item in iterable}
# 或者带有条件的:
new_set = {expression for item in iterable if condition}

示例:

python 复制代码
# 创建一个集合,包含1到10中的偶数  
even_set = {x for x in range(1, 11) if x % 2 == 0}  
print(even_set)  # 输出: {2, 4, 6, 8, 10}

# 把一个数值列表里的数进行去重处理
old_list = [0, 0, 0, 1, 2, 3]
new_set = {item for item in old_list}
print(new_set)  # 输出: {0, 1, 2, 3}

4.生成器推导式(Generator Expression)

生成器推导式用于生成的是一个生成器。生成器推导式跟列表推导式,非常的像,只是把 [] 换成了 ()。生成器对象是一个迭代器,它允许你逐个生成和访问元素,而不是一次性生成所有元素,这样可以节省内存空间,特别适用于处理大量数据的情况。

python 复制代码
new_gen = (expression for item in iterable)

示例:

python 复制代码
# 创建一个生成器表达式,生成1到10的平方  
squares = (x**2 for x in range(1, 11))  
  
# 访问生成器中的元素  
for square in squares:  
    print(square)

一旦生成器对象被迭代完毕,它就不能再次使用。如果你试图再次迭代同一个生成器对象,你将不会得到任何元素,因为生成器已经"耗尽"了。如果需要再次迭代相同的元素,你需要重新创建生成器对象。

5. 嵌套推导

嵌套推导可以有多层,建议最多嵌套两层,过多的话代码就会变得非常难理解。

python 复制代码
# 九九乘法表
print('\n'.join([' '.join(['%2d *%2d = %2d' % (col, row, col * row) for col in range(1, row + 1)]) for row in range(1, 10)]))

推导式的优点在于其简洁、高效和可读性。它们使得数据转换和筛选变得更加容易,并且可以配合循环使用,方便处理散乱的数据。无论是创建新的列表、字典、集合还是生成器,推导式都能提供一种优雅且高效的方式。

相关推荐
灏瀚星空8 分钟前
从单机工具到协同平台:开源交互式模拟环境的技术演进之路
经验分享·笔记·python·开源·oneapi
西柚小萌新12 分钟前
【Python爬虫实战篇】--Selenium爬取Mysteel数据
开发语言·爬虫·python
努力写代码的熊大12 分钟前
c语言中文件操作详解
c语言·开发语言
QUST-Learn3D19 分钟前
高精度并行2D圆弧拟合(C++)
开发语言·c++
天才测试猿21 分钟前
软件测试之功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
项目題供诗29 分钟前
Python类和对象二(十一)
python
肉肉不吃 肉34 分钟前
ES6 模块化 与 CommonJS 的核心概念解析
开发语言·javascript·es6
明月醉窗台42 分钟前
Qt 入门 6 之布局管理
c语言·开发语言·c++·qt
碎梦归途1 小时前
23种设计模式-结构型模式之适配器模式(Java版本)
java·开发语言·jvm·单例模式·设计模式·适配器模式
云小逸1 小时前
【C++】继承
开发语言·c++