List_comp = [x**2 for x in range(10) if x%2==0] print(List_comp) Gen_exp = (x**2 for x in range (10) if x%2==0) print(Gen_exp) 内存大小
时间: 2024-10-08 10:04:33 浏览: 25
5_2_x_comp.zip_5_2_x_co
在Python中,List_comprehension和Generator Expression都是创建序列的简洁语法。
首先,`List_comp` 是列表推导式,它会遍历 `range(10)` 中的偶数(因为条件 `if x % 2 == 0`),对每个偶数 `x` 计算平方 `x**2`,然后将结果存储在一个列表中。执行完这个列表推导后,你会得到一个包含前10个偶数平方的列表。
```python
List_comp = [x**2 for x in range(10) if x%2==0]
print(List_comp) # 输出:[0, 4, 16, 36, 64, 100]
```
而 `Gen_exp` 是生成器表达式,它同样遍历并处理偶数,但是不会一次性计算所有结果并存储在内存中,而是按需逐个生成。这意味着如果你只对生成的结果进行迭代,而不是一次性获取整个列表,那么生成器会更节省内存。
```python
Gen_exp = (x**2 for x in range(10) if x%2==0)
# 这是一个惰性求值的序列,打印会显示类似于 <generator object <genexpr> at 0x7f9f8b233c10>
print(Gen_exp)
```
当涉及到大量数据或需要避免一次性加载到内存的情况时,生成器表达式通常比列表推导式更高效。
关于内存大小的问题,由于 `Gen_exp` 是生成器,它不需要预先占用那么多内存。当你使用 `for item in Gen_exp:` 进行迭代时,每次迭代才会计算一个元素。所以相比于 `List_comp`,生成器在内存消耗上会有显著的优势,特别是当数据量大时。如果需要比较它们的确切内存占用,可以使用内置的 `sys.getsizeof()` 函数,但它只能给出大概的估计,因为实际开销还包括其他内部结构。
阅读全文