这是对该问题的后续跟踪
因此,首先,您会注意到无法sum
对要连接的字符串列表执行,python告诉您改为使用str.join
,这是个好建议,因为无论您如何+
在字符串上使用,性能都很差。
“不能使用sum
”限制不适用于list
,尽管这itertools.chain.from_iterable
是执行这种列表平整的首选方法。
但是sum(x,[])
什么时候x
是列表绝对是不好的。
但是它应该保持这种状态吗?
我比较了三种方法
import time
import itertools
a = [list(range(1,1000)) for _ in range(1000)]
start=time.time()
sum(a,[])
print(time.time()-start)
start=time.time()
list(itertools.chain.from_iterable(a))
print(time.time()-start)
start=time.time()
z=[]
for s in a:
z += s
print(time.time()-start)
结果:
sum()
在清单清单上:10.46647310256958。好吧,我们知道。itertools.chain
:0.07705187797546387itertools.chain
您看到的快)所以,sum
是远远落后,因为它执行result = result + b
的,而不是result += b
所以现在我的问题是:
sum
如果可用,为什么不能使用这种累积方法?
(这对于已经存在的应用程序将是透明的,并使使用sum
内置函数有效地展平列表成为可能)
我们可以尝试使 sum() 更智能,但Alex Martelli和Guido van Rossum希望将其重点放在算术求和上。
FWIW,您应该使用以下简单代码获得合理的性能:
result = []
for seq in mylists:
result += seq
对于您的另一个问题,“为什么总不能使用这种累加方法?”,请参见Python / bltinmodule.c中关于builtin_sum()的注释:
/* It's tempting to use PyNumber_InPlaceAdd instead of
PyNumber_Add here, to avoid quadratic running time
when doing 'sum(list_of_lists, [])'. However, this
would produce a change in behaviour: a snippet like
empty = []
sum([[x] for x in range(10)], empty)
would change the value of empty. */
问题内容: 如何使用JS更改视频的来源? 问题答案: 当然,您可以在元素上设置属性: 或使用jQuery代替标准DOM方法:
既然字符串是不可变的,我们如何将字符串更改为示例 现在我正在做 它将打印“你好玛纳斯”。所以字符串s1会改变。 那么,你怎么能说字符串是不可变的呢?
面经总结: 楼主自我介绍: 楼主普通211本科 ,24届 非科班 java后端开发方向 lc300道 于去年10月开始准备找实习。 于12月面上北京一家中厂,方向是搜索引擎开发方向。在这两个月的实习期间主要参与了由ES搭建的搜索引擎。也由此在这段期间学习了ES与mq的相关知识。 于2月正式开始准备下一段的实习求职过程,这一个月每周都几乎4次面试,强度虽然拉满了,但是也是真的开心,因为去年12月投简
本文向大家介绍来说说你对重绘和重排的理解,以及如何优化?相关面试题,主要包含被问及来说说你对重绘和重排的理解,以及如何优化?时的应答技巧和注意事项,需要的朋友参考一下 浏览器加载网页时会生成DOM树和CSSOM树 重绘: 当盒子的位置、大小以及其他属性,例如颜色、字体大小等都确定下来之后,浏览器便把这些原色都按照各自的特性绘制一遍,将内容呈现在页面上。重绘是指一个元素外观的改变所触发的浏览器行为,
问题内容: 当我使用maven- hibernate3-plugin(又名hbm2ddl)生成数据库架构时,它会创建许多数据库约束,并且具有难以理解的约束名称,例如。 有没有办法提供更有用的名称,例如? 如果是这样,则可以更轻松地在日志文件和其他地方(除了约束名称之外)不告诉您其他信息的地方查找问题。 问题答案: 从JPA 2.1开始,可以为外键命名。例如 只要确保在@JoinColumn中使用它
本文向大家介绍请你来说一说协程?相关面试题,主要包含被问及请你来说一说协程?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、概念: 协程,又称微线程,纤程,英文名Coroutine。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。 例如: 由协程运行结果可能是12x3yz。在执行A的过程中,可以随时中断,去执行B,B也可能在