- 列表推导式代码如下:
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)
- 在更复杂场景下,优化多层嵌套列表推导式性能的方法:
- 使用生成器表达式代替列表推导式:列表推导式会一次性生成整个列表,占用较多内存。生成器表达式则是按需生成数据,节省内存。例如将上述列表推导式改为生成器表达式:
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实现的,运行速度更快。例如
map
和 filter
函数。
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)