python基础之列表推导式

例1:

>>> List=[x for x in range(10)]
>>> List
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

等价于:

>>> List=[]
>>> for x in range(10):
	List.append(x)	
>>> List
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

例2:

>>> List=[x+3 for x in range(10)]
>>> List
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

>>> a=[1,2,3,4,5]
>>> List=[x*2 for x in a]
>>> List
[2, 4, 6, 8, 10]

例3:两个for循环

>>> List=[x for x in range(3) for x in range(5)]
>>> List
[0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

等价于:

>>> List=[]
>>> for x in range(3):
	    for x in range(5):
		    List.append(x)
>>> List
[0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

例4:

>>> List=[(x,y) for x in range(3) for y in range(4)]
>>> List
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]

等价于:

>>> List=[]
>>> for x in range(3):
	for y in range(4):
		List.append((x,y))	
>>> List
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]

例5:for 循环后面跟if条件语句: 用if 语句判断,当if后面的语句值为真时,将对应的元素放入列表

>>> List=[x for x in range(3) for x in range(8) if x%2==0] 
>>> List
[0, 2, 4, 6, 0, 2, 4, 6, 0, 2, 4, 6]

例6 :

>>> a=[[1,2],[3,4],[5,6]]
>>> [j for i in a for j in i]
[1, 2, 3, 4, 5, 6]

 

<think>我们被要求解释Python列表推导式的工作原理及使用方法。根据引用内容,列表推导式是for循环创建列表的简化版。引用中提供了基本用法和带条件的用法。 结构安排: 1. 列表推导式的基本概念 2. 列表推导式与等价的for循环对比 3. 带条件的列表推导式(过滤条件) 4. 使用建议(何时使用,何时避免) 5. 其他推导式(字典推导式、集合推导式)的简要提及 6. 示例代码 注意:引用[1]和[3]提供了代码示例,引用[2]给出了使用建议。 由于用户要求理解工作原理及使用方法,我们将从基础开始逐步讲解。</think>### Python 列表推导式详解 列表推导式Python 中高效创建列表的语法糖,本质是`for`循环的简化形式。其核心原理是**通过单行表达式生成新列表**,比传统循环更简洁高效[^1]。 #### 一、基本语法结构 ```python [expression for item in iterable] ``` - **expression**:对每个元素的操作表达式 - **item**:迭代变量 - **iterable**:可迭代对象(列表/字符串/range等) ##### 示例对比:传统循环 vs 列表推导式 ```python # 传统循环 result = [] for i in range(5): result.append(i * 2) print(result) # [0, 2, 4, 6, 8] # 列表推导式 result = [i * 2 for i in range(5)] # 等效单行实现 print(result) # [0, 2, 4, 6, 8] ``` #### 二、带条件的列表推导式 通过添加`if`语句实现元素过滤[^3]: ```python [expression for item in iterable if condition] ``` ##### 示例:筛选偶数并平方 ```python # 筛选0-10的偶数并计算平方 squares = [x**2 for x in range(11) if x % 2 == 0] print(squares) # [0, 4, 16, 36, 64, 100] ``` #### 三、多层循环推导式 支持嵌套循环,生成笛卡尔积: ```python colors = ["红", "蓝"] sizes = ["S", "L"] combinations = [(color, size) for color in colors for size in sizes] print(combinations) # [('红','S'), ('红','L'), ('蓝','S'), ('蓝','L')] ``` #### 四、使用建议与注意事项 1. **适用场景** - 简单数据转换(如类型转换`[int(x) for x in str_list]`) - 数据过滤(如`[x for x in data if x > 0]`) - 快速生成测试数据(如`[random.random() for _ in range(10)]`) 2. **避免场景**[^2] - 当逻辑超过两行时(改用传统循环) - 需要异常处理时 - 存在副作用操作时(如文件写入) 3. **性能优势** ```python # 生成1000万个数字的列表 %timeit [i**2 for i in range(10**7)] # 约1.2秒 (推导式) %timeit list(map(lambda x: x**2, range(10**7))) # 约1.8秒 (map) ``` #### 五、其他推导式类型 1. **字典推导式** ```python names = ["Alice", "Bob"] name_lengths = {name: len(name) for name in names} print(name_lengths) # {'Alice':5, 'Bob':3} ``` 2. **集合推导式**(自动去重) ```python duplicates = [1, 2, 2, 3, 4, 4] unique = {x for x in duplicates} print(unique) # {1, 2, 3, 4} ``` #### 六、数学原理 列表推导式本质是**集合构建表示法**的代码实现: $$ \text{新列表} = \{ f(x) \mid x \in S \land P(x) \} $$ 其中: - $f(x)$ 为表达式(如 $x^2$) - $S$ 为原始集合(如 $\{0,1,2,...,10\}$) - $P(x)$ 为条件(如 $x \mod 2 = 0$) > 提示:在 IPython 中使用`%%timeit`可测试推导式与循环的性能差异。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值