此问题在此处已有答案:
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
?
1条答案
按热度按时间elcex8rz1#
需要将
comb
定义为列表而不是生成器,如下所示:这将给予你你所期望的结果。然而,它将增加你的内存利用率,因为你充分地评估
comb
,而不是让它在你需要的时候等待你的值。内存/便利性的权衡是否值得取决于你。