总结
在性能方面,numpy 或列表乘法是明显的赢家,因为它们比其他方法快 10-20 倍。
我对提出的各种选项进行了一些性能测试。我在 Linux (Ubuntu 8.10) 上使用 Python 2.5.2 和 1.5 Ghz Pentium M。
原文:
python timeit.py -s 'bool_list = [True] * 1000' 'for x in xrange(len(bool_list)): bool_list[x] = False'
1000 次循环,3 次中的最佳:每个循环 280 微秒
使用列表理解的基于切片的替换:
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = [False for element in bool_list]'
1000 个循环,3 次中最好的:每个循环 215 微秒
使用生成器理解的基于切片的替换:
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = (False for element in bool_list)'
1000 次循环,3 次中的最佳:每个循环 265 微秒
枚举:
python timeit.py -s 'bool_list = [True] * 1000' 'for i, v in enumerate(bool_list): bool_list[i] = False'
1000 次循环,3 次中的最佳:每个循环 385 微秒
Numpy:
python timeit.py -s 'import numpy' -s 'bool_list = numpy.zeros((1000,), dtype=numpy.bool)' 'bool_list[:] = False'
10000 次循环,3 次中的最佳:每个循环 15.9 微秒
使用列表乘法的基于切片的替换:
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = [False] * len(bool_list)'
10000 次循环,3 次中的最佳:每个循环 23.3 微秒
使用列表乘法替换引用
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list = [False] * len(bool_list)'
10000 次循环,3 次中的最佳:每个循环 11.3 微秒