gpt4 book ai didi

python - 具有多项作业的列表理解

转载 作者:行者123 更新时间:2023-12-01 04:52:15 25 4
gpt4 key购买 nike

我目前有用于分解大数的代码:

def f1(n):
return [[i, n//i] for i in range(1 , int(n**0.5) + 1) if n % i == 0]

这是迄今为止我见过的最快的版本(如果有更快的方法,我也很想知道),但我想要一个没有嵌套的所有因素的列表(所以我想要类似于:[因子 1、因子 2、因子 3、...、因子 n-3、因子 n-2、因子 n-1、因子 n] 等等。顺序为“这真的很重要。

因此,我想知道是否有一种方法可以通过列表理解来分配多个作业。

def f1(n):
return [i, n//i for i in range(1 , int(n**0.5) + 1) if n % i == 0]

这样我就没有嵌套列表了。它会更快,而速度至关重要。

我查看了文档,但找不到多个分配的单个示例。

最佳答案

列表推导式很棒,但有时它们并不是最好的解决方案,具体取决于可读性和速度的要求。有时,仅写出隐含的 for 循环(和 if 语句)会更具可读性且更快。

def factors(n):
l = []
for i in range(1, int(n**0.5)+1):
if n % i == 0:
l.append(i)
l.append(n//i)
return l

对于小数字,上述函数比列表理解更快。对于较大的数字(1,000,000 及更大),函数和列表理解在速度方面是相等的。

为了稍微提高速度,您还可以缓存列表的追加方法,尽管这会使该函数的可读性稍差。

def factors(n):
l = []
append = l.append
for i in range(1, int(n**0.5)+1):
if n % i == 0:
append(i)
append(n//i)
return l

速度比较:

In [86]: %timeit factors_list_comprehension(1000)
100000 loops, best of 3: 7.57 µs per loop

In [87]: %timeit factors_function(1000)
100000 loops, best of 3: 6.24 µs per loop

In [88]: %timeit factors_optimised_function(1000)
100000 loops, best of 3: 5.81 µs per loop

In [89]: %timeit factors_list_comprehension(1000000)
10000 loops, best of 3: 111 µs per loop

In [90]: %timeit factors_function(1000000)
10000 loops, best of 3: 108 µs per loop

In [91]: %timeit factors_optimised_function(1000000)
10000 loops, best of 3: 106 µs per loop

关于python - 具有多项作业的列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28177727/

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