python itertools组合只能用于一个副本[duplicate]

zf9nrax1  于 2022-11-21  发布在  Python
关注(0)|答案(1)|浏览(139)

此问题在此处已有答案

Why can a python generator only be used once? [duplicate](1个答案)
17小时前就关门了。
当我从itertools使用combinations时,我发现我只能使用它一次,之后我必须重复这行代码才能使它再次工作。例如,

from itertools import combinations
comb = combinations( range( 0 , 5 ) , 2 )
xyLabels = [ (f'PCA{x}', f'PCA{y}') for x , y in  comb ]

>[('PCA0', 'PCA1'), ('PCA0', 'PCA2'), ('PCA0', 'PCA3'), ('PCA0', 'PCA4'), ('PCA1', 'PCA2'), ('PCA1', 'PCA3'), ('PCA1', 'PCA4'), ('PCA2', 'PCA3'), ('PCA2', 'PCA4'), ('PCA3', 'PCA4')]

而如果我执行以下操作:

comb = combinations( range( 0 , 5 ) , 2 )
xyLabels = [ (f'PCA{x}', f'PCA{y}') for x , y in  comb ]
yxLabels = [ (f'PCA{x}', f'PCA{y}') for x , y in  comb ]
print(yxLabels)
> []

打印secod参数只会产生一个空列表。但是,要解决这个问题,我必须执行以下操作:

comb = combinations( range( 0 , 5 ) , 2 )
xyLabels = [ (f'PCA{x}', f'PCA{y}') for x , y in  comb ]
comb = combinations( range( 0 , 5 ) , 2 )
yxLabels = [ (f'PCA{x}', f'PCA{y}') for x , y in  comb ]
print(yxLabels)

它背后的原因是什么?我如何才能让它只使用一个comb

elcex8rz

elcex8rz1#

需要将comb定义为列表而不是生成器,如下所示:

comb = list(combinations( range( 0 , 5 ) , 2 ))

这将给予你你所期望的结果。然而,它将增加你的内存利用率,因为你充分地评估comb,而不是让它在你需要的时候等待你的值。内存/便利性的权衡是否值得取决于你。

相关问题