如何解决如何提高代码效率,使其运行时间少于1秒
我最近进行了一项测试(现在已经结束),并且我有以下问题: question
,我可以回答这个问题。但是,最后有一个测试用例说,如果该用例的运行时间小于1s,我们将获得额外的10分。但是,我的问题是我无法使运行时间低于1秒。我的代码和测试用例如下。另外,我应该补充一点,我们不允许导入任何软件包。
测试用例:
longList = [i for i in range(100000)]
print(calculateAreas(longList,longList[::-1]))
我的代码:
def calculateAreas(w_list,h_list):
width_length = len(w_list)
height_length = len(h_list)
list_of_areas = []
red_area = 0
white_area = 0
yellow_area = 0
for i in range(width_length):
for n in range(height_length):
if (i+n-2) % 3 == 0:
red_area += (w_list[i] * h_list[n])
if (i+n-2) % 3 == 1:
white_area += (w_list[i] * h_list[n])
if (i+n-2) % 3 == 2:
yellow_area += (w_list[i] * h_list[n])
list_of_areas.insert(0,white_area)
list_of_areas.insert(1,yellow_area)
list_of_areas.insert(2,red_area)
tuple_area = tuple(list_of_areas)
return tuple_area
解决方法
我想说,加快速度的方法是使用列表理解,并尝试仅进行必要的操作。在白色->黄色->红色->白色...的两个轴上都有一个模式,我们可以使用列表推导将这些颜色分开,然后找到它们中每个颜色的总面积。 要在轴上分离颜色,我们可以使用:
list[::3]
因此,说我们可以将w_list [0]上的所有白色值相加,然后乘以h_list [0]上的所有白色值的总和,我们将得到白色总值的1/3。因此,我们可以将w_list [1]与h_list [1]和w_list [2]与h_list [2]重复一次。简而言之,我想做的是用白色的3个网格分隔白色
W--W--W-
+--+--+-
+--+--+-
W--W--W-
+--+--+-
彼此之间略有错位,并使用列表理解来隔离和获取区域,而不必嵌套嵌套循环:
def calculateAreas(w_list,h_list):
white = 0
yellow = 0
red = 0
for i,j in zip([0,1,2],[0,2,1]):
white += sum(w_list[i::3]) * sum(h_list[j::3])
yellow += sum(w_list[i::3]) * sum(h_list[(j+1)%3::3])
red += sum(w_list[i::3]) * sum(h_list[(j+2)%3::3])
return (white,yellow,red)
这样,我们只传递了3次就抛出了for循环,并且在我的慢速笔记本电脑上,在100000个元素的列表中,计时为0.0904s。如果我可以为您提供一些有关代码的提示:1-尝试直接在列表元素上进行交互(使用枚举)2-使用'elif'和'else'语句(如果颜色为'白色',则无需检查其红色)。通常,如果您需要加速代码,请尝试避免嵌套循环,想象一下将一个列表中的每个元素与另一个列表中的每个其他元素进行交互:多数民众赞成len(list)** 2!
,您可以使用lru_cache在花费时间的python代码中提高函数的效率,它可以存储缓存并减少运行时间。
语法-
# importing module
from functools import lru_cache
# we use lru_cache as a decorator,it takes maxsize argument
@lru_cache(maxsize=10)
def exampleFunction(str):
time.sleep(2s)
print(str)
# exampleFunction will take 2 seconds here to run -
exampleFunction ("when function called first time i took 2 seconds to run")
# now exampleFunction will not take a second to run as it is stored in cache
exampleFunction("exampleFunction didn't take a single second now to run")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。