当前位置:  开发笔记 > 编程语言 > 正文

Python:改变列表的元素

如何解决《Python:改变列表的元素》经验,为你挑选了4个好方法。

我有一个布尔列表,偶尔我将它们全部重置为假.首次将重置写为:

for b in bool_list:
    b = False

我发现它不起作用.我花了一些时间挠挠脑袋,然后想起那当然不会起作用,因为我只是改变了对bool的引用,而不是它的价值.所以我重写为:

for i in xrange(len(bool_list)):
    bool_list[i] = False

一切正常.但我发现自己在问:"这真的是改变列表中所有元素的最pythonic方法吗?" 还有其他方法可以提高效率或更清晰吗?



1> Greg Hewgill..:

如果您只有一个对列表的引用,则以下内容可能更容易:

bool_list = [False] * len(bool_list)

这将创建一个填充了False元素的新列表.

有关类似示例,请参阅我对Python字典清晰的答案.


投票,因为他表示他需要它在现有名单中行动.

2> Federico A. ..:

这是另一个版本:

bool_list = [False for item in bool_list]



3> Dan Homerick..:

总结 性能方面,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 usec

基于切片的替换与列表理解:

python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = [False for element in bool_list]'

1000循环,最佳3:215每循环usec

基于切片的替换与生成器理解:

python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = (False for element in bool_list)'

1000循环,最佳3:265每循环usec

枚举:

python timeit.py -s 'bool_list = [True] * 1000' 'for i, v in enumerate(bool_list): bool_list[i] = False'

1000循环,每循环最佳3:385 usec

Numpy:

python timeit.py -s 'import numpy' -s 'bool_list = numpy.zeros((1000,), dtype=numpy.bool)' 'bool_list[:] = False'

10000循环,最佳3:15.9 usec每循环

使用列表乘法进行基于切片的替换:

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每循环usec



4> namin..:
bool_list[:] = [False] * len(bool_list)

要么

bool_list[:] = [False for item in bool_list]

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有