python - 在 python 中 list.extend 的替代方案/更快的方法?

标签 python python-2.7

我有大量数据集需要扩展。

我想知道什么是替代/更快的方法。

我尝试了 iadd 和 Extend,它们都需要相当长的时间才能创建输出。

from timeit import  timeit

raw_data = [];
raw_data2 = [];
added_data = range(100000)

# .__iadd__
def test1():
    for i in range(10):
        raw_data.__iadd__(added_data*i);

#extend

def test2():
    for i in range(10):
        raw_data2.extend(added_data*i);


print(timeit(test1,number=2));
print(timeit(test2,number=2));

我觉得列表理解或数组映射可以回答我的问题......

最佳答案

如果您需要将数据作为列表,则没有太多好处 - list.extend__iadd__ 在性能上非常接近 - 取决于您使用的数量或者另一个最快:

import timeit 
from itertools import repeat , chain 
raw_data = [] 
added_data = range(100000) # verify data : uncomment: range(5)

def iadd():
    raw_data = [] 
    for i in range(10):
        raw_data.__iadd__(added_data)
    # print(raw_data)

def extend():
    raw_data = [] 
    for i in range(10):
        raw_data.extend(added_data)
    # print(raw_data)

def tricked():
    raw_data = list(chain.from_iterable(repeat(added_data,10)))
    # print(raw_data)

for w,c in (("__iadd__",iadd),("  extend",extend),(" tricked",tricked)):
    print(w,end = " : ")
    print("{:08.8f}".format(timeit.timeit(c, number = 200)))

输出:

# number = 20
__iadd__ : 0.69766775
  extend : 0.69303196    # "fastest"
 tricked : 0.74638002


# number = 200
__iadd__ : 6.94286992    # "fastest"
  extend : 6.96098415
 tricked : 7.46355973

如果您不需要这些东西,您可能最好使用 chain.from_iterable(repeat(added_data,10)) 的生成器,而无需创建列表本身,以减少使用的内存量.

相关:

关于python - 在 python 中 list.extend 的替代方案/更快的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55537686/

相关文章:

python - 使用工作日或添加工作日创建数据框

python - uWSGI 说 : "ImportError: No module named wsgi"

python - 查找第n个 '|'之后的子串

python - 是否有避免与标准模块名称冲突的 python 命名约定?

python - 使用python和pandas制作MIS折线图

python - configparser 在 Python 3.4 中不工作,NoSectionError 但在 PyCharm 中工作正常

python-2.7 - 如何合并两个数据框而不丢失任何行

python - 有效比较 Pandas Dataframe 中的行数据

postgresql - 在 AWS ec2 实例上通过 sqlalchemy to_sql 过程插入;面临位数据类型列的问题

python - 函数调用无延迟