面试题答案
一键面试- 使用列表推导式生成包含1到10中所有偶数的列表:
even_numbers = [num for num in range(1, 11) if num % 2 == 0]
解释:列表推导式的语法是在一对方括号[]
内,先写要生成的元素表达式num
,然后使用for
循环遍历range(1, 11)
,再通过if
条件num % 2 == 0
筛选出偶数。列表推导式会立即生成整个列表并占用内存。
- 使用生成器表达式生成一个可迭代对象,其元素为1到10中所有奇数的平方:
odd_squares_generator = (num ** 2 for num in range(1, 11) if num % 2 != 0)
解释:生成器表达式的语法是在一对圆括号()
内,先写要生成的元素表达式num ** 2
,然后使用for
循环遍历range(1, 11)
,再通过if
条件num % 2 != 0
筛选出奇数。生成器表达式不会立即生成所有元素,而是按需生成,只有在迭代时才产生值,因此更节省内存,性能上对于大数据量更有优势。
语法区别
- 列表推导式:使用方括号
[]
。 - 生成器表达式:使用圆括号
()
。
性能区别
- 列表推导式:会立即生成整个列表,占用较多内存,适用于数据量较小且需要快速访问所有元素的场景。
- 生成器表达式:按需生成元素,在迭代过程中逐步产生值,节省内存,适用于数据量较大,不需要一次性处理所有数据的场景。