print(list(my_generator))有值,‌a=list(my_generator); print(a)为空

使用分词器jieba.cut

cut_res = jieba.cut("分装化学品动作太繁琐")
print(type(cut_res), list(cut_res))
cut_list = list(cut_res)
print(cut_list)

打印结果是

<class 'generator'> ['分装', '化学品', '动作', '太', '繁琐']
[]

搜索后了解到生成器(‌generator)‌是一个只能遍历一次的迭代器,‌一旦你遍历过它,‌它就不能再产生值了。‌cut_res在第一次被转换为列表后已经被消耗掉了。‌

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()` 函数,但它只能给出大概的估计,因为实际开销还包括其他内部结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值