返回信息流>>> l=range(0,9)
>>> a=[]
>>> a.append(i for i in l if i==3 or i==6)
>>> type(a)
<type 'list'>
>>> type(a[0])
<type 'generator'>
有段代码要对数据进行过滤,就写了上面那句判断, 想取出a的每个值,得要2次for 觉得有点麻烦
这是一条镜像帖。来源:北邮人论坛 / python / #9964同步于 2015/11/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
generator
tycoon0
2015/11/23镜像同步19 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
那句话本来就是生成的一个generator呀,调用len(a)的话,结果是1,并不是2呢。。。
楼主如果想要省事,那就想一些办法,让前一句的for真正的运行起来。
尝试这样:
a = [i for i in l if i==3 or i==6]
生成器不是比格高吗
而且如果数据量很大 直接用列表资源消耗太大
【 在 StephenXiao 的大作中提到: 】
: 那句话本来就是生成的一个generator呀,调用len(a)的话,结果是1,并不是2呢。。。
: 楼主如果想要省事,那就想一些办法,让前一句的for真正的运行起来。
: 尝试这样:
: ...................
【 在 tycoon0 的大作中提到: 】
: 生成器不是比格高吗
: 而且如果数据量很大 直接用列表资源消耗太大
试试这个:
gs = []
a = [1,2,3,4,5]
gs.append(x for x in a)
a[:] = [6,7,8,9,10]
for x in gs[0]:
print(x)
输出
6
7
8
9
10
[ema2]
哈哈哈 谢谢啊 经常指导我
【 在 nuanyangyang 的大作中提到: 】
:
: 试试这个:
: [code=python]
: ...................
>>> gs = []
>>> a=[1,2,3,4,5]
>>> gs.append(x for x in a)
>>> a=[6,7,8,9]
>>> for x in gs[0]: print x
...
1
2
3
4
5
>>>
求深入解释下
【 在 nuanyangyang 的大作中提到: 】
:
: 试试这个:
: [code=python]
: ...................
【 在 tycoon0 的大作中提到: 】
: >>> gs = []
: >>> a=[1,2,3,4,5]
: >>> gs.append(x for x in a)
: ...................
还是直接看图吧。
再来:
>>> a = [1,2,3]
>>> b = ["a","b","c"]
>>> gs = []
>>> gs.append((x,y) for x in a for y in b)
>>> a = [4,5,6]
>>> b = ["d","e","f"]
>>> for x,y in gs[0]: print(x,y)
...
1 d
1 e
1 f
2 d
2 e
2 f
3 d
3 e
3 f
这是深复制和浅复制的坑吧。
【 在 nuanyangyang 的大作中提到: 】
:
: 试试这个:
: [code=python]
: ...................
这个太神奇了!
元组加如之后,应该不变了吧。是因为后者的值是字符串而不是常数所以可变吗?
append语句生成的gs是一个二维的生成器。然后gs[0], 去打印,是确定了gs[0]的值,然而再去生成gs[1]的内容,所以这样吗?还是gs[0]的值特殊无法被改变?求解!
【 在 nuanyangyang 的大作中提到: 】
: 再来:
: [code=python]
: >>> a = [1,2,3]
: ...................