小编The*_*mis的帖子

itertools.islice与列表切片进行比较

我一直在尝试应用一种算法,根据某个标准将python列表缩小为较小的列表.由于原始列表的大量,大约100k元素,我试图itertools避免多个内存分配,所以我想出了这个:

reducedVec = [ 'F' if sum( 1 for x in islice(vec, i, i+ratio) if x == 'F' ) 
                         > ratio / 3.0 else 'T'
                for i in xrange(0, len(vec), ratio) ]
Run Code Online (Sandbox Code Playgroud)

当vec有大约100k元素时,执行时间大约需要几分钟.当我尝试时:

reducedVec = [ 'F' if sum( 1 for x in vec[i:i+ratio] if x == 'F' ) 
                         > ratio / 3.0 else 'T'
                for i in xrange(0, len(vec), ratio) ]
Run Code Online (Sandbox Code Playgroud)

本质上用切片替换islice,执行是瞬时的.

你能想到一个合理的解释吗?我本以为避免重复分配一个包含大量元素的新列表,实际上可以节省一些计算周期而不是削弱整个执行.

干杯,忒弥斯

python iteration performance

14
推荐指数
1
解决办法
6936
查看次数

标签 统计

iteration ×1

performance ×1

python ×1