为了账号安全,请及时绑定邮箱和手机立即绑定

Python字符串“ join”比“ +”要快(?),但这里出了什么问题?

Python字符串“ join”比“ +”要快(?),但这里出了什么问题?

GCT1015 2019-09-24 16:19:50
我在较早的帖子中询问了用于批量动态字符串连接的最有效方法,并建议我使用join方法,这是最好,最简单和最快的方法(每个人都这么说)。但是,当我使用字符串连接时,我发现了一些奇怪的结果。我敢肯定有些事情正在发生,但我不能完全理解。这是我所做的:我定义了以下功能:import timeitdef x():    s=[]    for i in range(100):        # Other codes here...        s.append("abcdefg"[i%7])    return ''.join(s)def y():    s=''    for i in range(100):        # Other codes here...        s+="abcdefg"[i%7]    return sdef z():    s=''    for i in range(100):        # Other codes here...        s=s+"abcdefg"[i%7]    return sdef p():    s=[]    for i in range(100):        # Other codes here...        s+="abcdefg"[i%7]    return ''.join(s)def q():    s=[]    for i in range(100):        # Other codes here...        s = s + ["abcdefg"[i%7]]    return ''.join(s)我试图使其他功能(除了串联)在整个函数中几乎相同。然后,我对以下内容进行了测试,并在注释中给出了结果(在Windows 32位计算机上使用Python 3.1.1 IDLE):timeit.timeit(x) # 31.54912480500002timeit.timeit(y) # 23.533029429999942 timeit.timeit(z) # 22.116181330000018timeit.timeit(p) # 37.718607439999914timeit.timeit(q) # 108.60377576499991这意味着它表明strng = strng + dyn_strng是最快的。尽管时间差异不是很大(最后一个除外),但是我想知道为什么会这样。那是因为我使用的是Python 3.1.1,并且提供的“ +”效率最高?我应该使用“ +”代替加入吗?还是我做了一件非常愚蠢的事情?要不然是啥?请清楚解释。
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 1046 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信