MST

星途 面试题库

面试题:Python列表推导式与生成器之基础应用

请用列表推导式生成一个包含1到10中所有偶数的列表。再用生成器表达式生成一个可迭代对象,其元素为1到10中所有奇数的平方。请分别写出代码,并解释列表推导式和生成器表达式在语法和性能上的主要区别。
28.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 使用列表推导式生成包含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. 使用生成器表达式生成一个可迭代对象,其元素为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筛选出奇数。生成器表达式不会立即生成所有元素,而是按需生成,只有在迭代时才产生值,因此更节省内存,性能上对于大数据量更有优势。

语法区别

  • 列表推导式:使用方括号[]
  • 生成器表达式:使用圆括号()

性能区别

  • 列表推导式:会立即生成整个列表,占用较多内存,适用于数据量较小且需要快速访问所有元素的场景。
  • 生成器表达式:按需生成元素,在迭代过程中逐步产生值,节省内存,适用于数据量较大,不需要一次性处理所有数据的场景。