1. 列表推导式
my_list = [i for i in range(1, 1000001)]
- 内存占用:列表推导式直接在内存中创建一个完整的列表,对于100万个整数,每个整数占用一定字节数(在64位系统中,一个整数通常占用8字节),所以占用内存较大。
- 执行效率:列表推导式相对较快,因为它是Python内置的语法结构,在创建列表时使用的是优化过的底层代码。
2. range()
结合list()
my_list = list(range(1, 1000001))
- 内存占用:
range()
本身是一个可迭代对象,并不占用大量内存来存储所有值。但list()
将range
对象转换为实际的列表,同样会在内存中创建100万个整数的列表,内存占用与列表推导式类似。
- 执行效率:由于
range
对象创建开销较小,list()
转换过程相对高效,整体执行效率与列表推导式相近。
3. numpy
库
import numpy as np
my_array = np.arange(1, 1000001)
- 内存占用:
numpy
数组在存储数据时更加紧凑,它使用固定的数据类型(如np.int64
),相比于Python原生列表,在存储相同数量的整数时占用内存更小。例如,对于64位整数,numpy
数组的存储方式更高效。
- 执行效率:
numpy
库是用C语言实现的,在数值计算方面有高度优化,创建数组的效率非常高。特别是在处理大规模数值数据时,numpy
远远快于Python原生列表操作。
选择建议
- 内存敏感场景:如果内存资源有限,应优先选择
numpy
库,因为其内存占用小。例如在处理大数据集且内存不足的情况下,numpy
数组是更好的选择。
- 简单快速创建列表:如果对内存占用不太敏感,且只是简单地需要一个Python列表,列表推导式和
range()
结合list()
都很合适。它们代码简洁,执行效率也较高,适用于一般规模的数据处理。
- 数值计算场景:若后续需要进行大量的数值计算,如数学运算、统计分析等,
numpy
库不仅在创建时高效,其丰富的函数和方法也能大大提高计算效率,应优先选用。