如何解决Python-高效地将相同的值分配给列表切片
如果我有Python列表l
,那么将相同的值v
分配给切片[start : stop : step]
的最有效(最快,高速)的方法是什么(例如,对于正数{{1} })的这个列表?
对于我的任务,我只需要一个浅表副本(副本参考)。另外,作为扩展我的任务的一个有趣的事情就是知道有效的方法来对相同值进行深拷贝分配。
接下来的两种方法是否可能是最快的方法?还是存在其他更快的方法?
step
和:
l[start : stop : step] = [v] * ((stop - start + step - 1) // step)
时间:
for i in range(start,stop,step):
l[i] = v
第一个变体的速度快
python -m timeit -s "l = list(range(10 ** 6)); start,step,v = 10,100000,2,99" "l[start : stop : step] = [v] * ((stop - start + step - 1) // step)"
200 loops,best of 5: 1.24 msec per loop
python -m timeit -s "l = list(range(10 ** 6)); start,99" "for i in range(start,step): l[i] = v"
50 loops,best of 5: 5.38 msec per loop
倍。
第一个变体需要不必要的创建有时大的相同4.3x
值列表,而且当分配给列表切片python时,确实可以重新创建整个列表v
!第二种解决方案使用缓慢的纯Python循环。
但是我真正需要的是一些内置的快速(基于l
的)标准Python函数,例如C
,有这样的东西吗? (至少适用于l.set_to_range(slice(start,step),v)
)。与step = 1
标准库中的std::fill相同,它在步骤= 1:C++
上执行此操作。
或者,如果不存在内置方法,我正在寻找有关存在其他更快方法(上述两种方法除外)的建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。