目录
- 1. 列表推导式
- 1.1 基本语法
- 1.2 示例
- 2. 生成器表达式
- 2.1 基本语法
- 2.2 示例
- 2.3 生成器的优势
- 3. 列表推导式 vs 生成器表达式
- 4. 小结
列表推导式和生成器是 python 中的两个非常有用的工具。它们可以帮助你以简洁和高效的方式创建和处理数据集合。了解它们的用法不仅可以让代码更加简洁,还能提升代码的执行效率。
1. 列表推导式
列表推导式(List Comprehension)是一种简洁的创建列表的方式。通过它,能够用一行代码生成列表,而不需要像传统方式那样使用循环。
1.1 基本语法
new_list = [expression for item in iterable if condition]
- expression:在每个元素上执行的操作,结果会存入新的列表。
- item:从可迭代对象中获取的元素。
- iterable:可以是列表、元组、集合、字符串等任何可迭代对象。
- condition(可选):对元素进行筛选,只有满足条件的元素才会被添加到新的列表中。
1.2 示例
创建一个包含1到10平方值的列表:
squares = [x**2 for x in range(1, 11)] print(squares) # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
带条件的列表推导式:
只保留偶数的平方:
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0] print(even_squares) # 输出:[4, 16, 36, 64, 100]
使用多个循环的列表推导式:
创建一个包含(1, 2), (1, 3), (2, 2www.devze.com), (2, 3)的列表:
pairs = [(x, y) for x in range(1, 3) for y in range(2, 4)] print(pairs) # 输出:[(1, 2), (1, 3), (2, 2), (2, 3)]
2. 生成器表达式
生成器表达式(Generator Expression)与列表推导式非常相似,但不同的是,生成器表达式不会一次性将所有结果存储在内存中,而是每次迭代时动态生成数据。这使得生成器在处理大量数据时比列表推导式更高效。
2.1 基本语法
generator = (expression for item in iterable if condition)
生成器表达式的语法与列表推导式几乎相同,只是使用了圆括号而不是方括号。
2.2 示例
生成一个生成器表达式:
gen = (x**2 for x in range(1, 11)) print(gen) # 输出:<generator object <genexpr> at 0x...>
要获取生成器中的元素,可以使用 next()
函数或将其转为列表:
print(next(gen)) # 输出:1 print(next(gen)) # 输出:4
将生成器转为列表:
gen_list = list(gen) print(gen_list) # 输出:[9, 16, 25, 36, 49, 64, 81, 100]
2.3 生成器的优势
生成器的主要优势在于它节省内存。生成器一次只生成一个值,而不是像列表那样一次性将所有元素加载到内存中。因此,生成器在处理非常大的数据集时非常有用。
例如:生成前 100 万个数字的平方
使用生成器:
large_gen = (x**2 for x in range(1, 1000001)) print(next(large_gen)) # 输出:1
与列表推导式slgeq相比,生成器几乎不占用额外内存,而列表推导式会创建一个 100 万元素的列表。
3. 列表推导式 vs 生成器表达式
特性 | 列表推导式 | 生成器表达式 |
---|---|---|
括号 | 方括号 [] | 圆括号 () |
返回类型 | 列表 | 生成器 |
内存消耗 | 会一次性加载所有元素到内存中 | 每次迭代动态生成编程客栈,内存占用小 |
适用场景 | 适合处理较小的数据集 | 适合处理大数据集或惰性计算 |
可修改性 | 生成的列表可以修改 | 生成器是只读的,不能修改 |
4. 小结
- 列表推导式:编程客栈用于创建新的列表,写法简洁、执行快速,适用于需要返回完整列表的场景。
- 生成器表达式:用于创建生成器,节省内存,适合处理大数据集或惰性计算的场景。
掌握列表推导式与生成器,不仅可以让代码更加简洁易读,还能有效提升代码性能,在不同的应用场景中选择合适的工具将大大提高代码效率。
到此这篇关于python实现列表推导式与生成器的文章就介绍到这了,更多相关python 列表推导式与生成器内容请搜索编程客栈(www.devze.com)以前的文章javascript或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论