Python——列表(list)推导式

本文基于python3。

1、Python推导式

你可以理解成一种数据的处理方式。目的是为了构建一个新的数据序列。
Python 支持各种数据结构的推导式:

  1. 列表(list)推导式
  2. 字典(dict)推导式
  3. 集合(set)推导式
  4. 元组(tuple)推导式

各自从字面意思就知道,创建一个列表、字典、集合、元组。
我们本文只看列表(list)推导式。

2、列表(list)推导式

列表推导式创建列表的方式更简洁。
常见的用法:

  1. 对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表。
  2. 用满足特定条件的元素创建子序列。

2.1、定义

定义主要有两种:(该部分定义来自:菜鸟教程

  • 定义1:
[表达式 for 变量 in 列表] 
[out_exp_res for out_exp in input_list]
  • 定义2
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]
  • out_exp_res:列表生成元素表达式,可以是有返回值的函数。
  • for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
  • if condition:条件语句,可以过滤列表中不符合条件的值。

总结:一个表达式,后面为一个 for 子句,然后跟着零个或多个 for 或 if 子句。结果是由表达式依据 for 和 if 子句求值计算而得出一个新列表。

基于总结话我们来实际操作一下。

2.2、实际操作

2.2.1、一个表达式,后面为一个 for 子句

创建 数值*2 的列表:

TestList = [x*2 for x in range(10)]

print(TestList)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

等价于以下语句:

TestList = []
for x in range(10):
    TestList.append(x*2)

print(TestList)

2.2.2、一个表达式,后面为一个 for 子句,然后,跟着if 子句。

创建 全是偶数 的列表:

TestList = [i for i in range(10) if i % 2 == 0]

print(TestList)
# [0, 2, 4, 6, 8]

等价于以下语句:

TestList = []
for i in range(10):
    if i % 2 == 0:
        TestList.append(i)

print(TestList)

2.2.3、一个表达式,后面为一个 for 子句,然后,跟着 for 子句。

直接上实例,一看就懂:

OldList = [[1, 2, 
### Python 列表推导式的定义 Python列表推导式是一种简洁的创建列表的语法,允许从已有可迭代对象中快速生成新列表[^1]。这种语法不仅简化了代码编写过程,还增强了程序的可读性和表达力。 ### 使用方法 #### 基本形式 最简单的列表推导式由一对方括号构成,在其中包含有表达式以及for语句用于遍历某个序列: ```python new_list = [expression for item in iterable] ``` 此结构会依次取出`iterable`中的每一个元素作为`item`,计算对应的`expression`并将结果存入`new_list`中[^2]。 #### 添加条件过滤 可以在上述基础上加入if子句实现更复杂的逻辑控制,从而只保留满足特定条件的数据项: ```python filtered_list = [expr for var in collection if condition] ``` 这里只有当`condition`为真时才会将当前循环变量经过`expr`转换后的值添加至最终的结果集中[^4]。 #### 复杂表达式与多重嵌套 对于更加复杂的需求场景,则支持使用更为灵活多变的形式——既可以采用较为冗长但是直观明了的传统方式逐层嵌套多个for...in组合;也可以利用紧凑而强大的链式调用来完成相同目标: ```python nested_comprehension = [(i, j) for i in range(3) for j in range(i)] matrix_transpose = [[row[i] for row in matrix] for i in range(len(matrix[0]))] ``` 以上两段代码分别展示了如何一次性展开双重循环关系建立笛卡尔积集合作为返回值,还有怎样巧妙运用两次内部包裹来达到矩阵转置的效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值