List join with extend vs. chain in python

在 python 中要将两个 list 连接起来的方法有很多
以下主要比较用三种方法:
__add__, list.extenditertools.chain后转list

import timefrom itertools import chainone = list(range(10000))two = list(range(10000))def use_add():    three = one + twodef use_extend():    three = one.copy()    three.extend(two)def use_chain():    three = list(chain(one, two))

Add

start_time = time.time()for _ in range(10000):    use_add()time.time() - start_time

Time: 0.9798197746276855 s

Extend

start_time = time.time()for _ in range(10000):    use_extend()time.time() - start_time

Time: 0.9656569957733154 s

Chain

start_time = time.time()for _ in range(10000):    use_chain()time.time() - start_time

Time: 2.501063823699951 s

__add__extend 几乎一样,到collections里面找实做的方法,发现__add__基本上是直接呼叫extend,所以时间上自然几乎一样:

class MutableSequence(Sequence):    pass        def __iadd__(self, values):        self.extend(values)        return self

至于chain 比另外两者慢了快2.5倍,原因可能是 chain 完后是生成迭代器,透过list将迭代器再转换成list的时候需要在对每个元素检查一次,所以用了更多时间。


不知道这样的测试是否正确,希望大家可以多给我些意见


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章