MST

星途 面试题库

面试题:Python 多层嵌套列表推导式的优化与应用

有一个三维列表 `matrix = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]`,要求使用列表推导式将其转换为一维列表,且新列表中的元素是原三维列表中所有大于3的元素乘以2后的结果。同时,请说明在更复杂场景下,如何优化多层嵌套列表推导式的性能。
29.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 列表推导式代码如下:
matrix = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
new_list = [num * 2 for sublist1 in matrix for sublist2 in sublist1 for num in sublist2 if num > 3]
print(new_list) 
  1. 在更复杂场景下,优化多层嵌套列表推导式性能的方法:
    • 使用生成器表达式代替列表推导式:列表推导式会一次性生成整个列表,占用较多内存。生成器表达式则是按需生成数据,节省内存。例如将上述列表推导式改为生成器表达式:
matrix = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
gen = (num * 2 for sublist1 in matrix for sublist2 in sublist1 for num in sublist2 if num > 3)
# 如果需要列表形式,再转换为列表
new_list = list(gen) 
print(new_list) 
  • 减少嵌套层数:可以通过一些中间步骤来简化多层嵌套。比如可以先将多层嵌套列表扁平化,然后再进行过滤和计算。例如:
from itertools import chain
matrix = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
flat_list = list(chain.from_iterable(chain.from_iterable(matrix)))
new_list = [num * 2 for num in flat_list if num > 3]
print(new_list) 
  • 使用内置函数和库:一些内置函数和标准库函数在底层是用C实现的,运行速度更快。例如 mapfilter 函数。
matrix = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
flat_list = list(chain.from_iterable(chain.from_iterable(matrix)))
result = list(map(lambda x: x * 2, filter(lambda x: x > 3, flat_list)))
print(result) 
  • 避免在列表推导式中进行复杂计算:如果在列表推导式中有复杂的计算逻辑,可以将其提取到单独的函数中,这样代码更易读且可能会有性能提升。例如:
def process_num(num):
    return num * 2

matrix = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
flat_list = list(chain.from_iterable(chain.from_iterable(matrix)))
new_list = [process_num(num) for num in flat_list if num > 3]
print(new_list)