我有大量数据集需要扩展。
我想知道什么是替代/更快的方法。
我尝试了 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/