gpt4 book ai didi

python - 为什么索引列表比分配新列表慢?

转载 作者:行者123 更新时间:2023-12-04 08:17:58 25 4
gpt4 key购买 nike

我认为索引列表会比额外的内存分配快得多。然而,下面的代码产生了一个非常令人惊讶的结果。

import random, timeit
from scipy import stats

random.seed(42)
a = [random.randint(-10000, 10000) for _ in range(10000)]

def new_list(a):
b = []
for v in a:
b.append(v*2)

def in_place(a):
for i in range(len(a)):
a[i] *= 2

print(stats.describe(timeit.repeat("new_list(a_cp)", setup="a_cp = a.copy()",
number=100, globals=globals())))
print(stats.describe(timeit.repeat("in_place(a_cp)", setup="a_cp = a.copy()",
number=100, globals=globals())))
我得到的结果是
DescribeResult(nobs=5, minmax=(0.16783145900000007, 0.2041749690000001), mean=0.18718994520000004, variance=0.00018897353500515855, skewness=-0.23156148623021452, kurtosis=-1.0041025476826309)
DescribeResult(nobs=5, minmax=(0.25297652999999976, 0.2932831710000001), mean=0.2716082258, variance=0.00024360213447797058, skewness=0.2423908282124137, kurtosis=-1.136485780718656)
这是一个很大的不同,不是吗?即使我更愿意使用 numpy如果性能 真的重要的是,我找不到分配新内存比遍历指针更快的充分理由。有人可以帮助我吗?
编辑: :
由于我的问题有点不清楚,我更改了标题并删除了一些句子。

最佳答案

它不会改变缓慢的列表,而是对其进行索引。如果您更改 new_list使用索引的函数以及后者会更快:

def new_list(a):
b = []
for i in range(len(a)):
b.append(a[i] * 2)

关于python - 为什么索引列表比分配新列表慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65624918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com