如何提高代码效率,使其运行时间少于1秒

如何解决如何提高代码效率,使其运行时间少于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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?