gpt4 book ai didi

python - 优化 Python 中的函数以处理大块数据

转载 作者:行者123 更新时间:2023-12-02 01:47:49 26 4
gpt4 key购买 nike

我尝试解决 HackerRank 上的一个问题,名为“Apple and Orange”,代码如下:

def countApplesAndOranges(s, t, a, b, apples, oranges):
count_apples = 0
count_oranges = 0
x = [x for x in range(s, t+1)]
pos_apple = [apple + a for apple in apples]
pos_orange = [orange + b for orange in oranges]
for i in x:
for j in pos_apple:
if j == i:
count_apples +=1
for l in pos_orange:
if l == i:
count_oranges += 1
print(count_apples)
print(count_oranges)

代码有效。然而,当我尝试提交它时,它通过了前 3 个测试,但其余测试失败,并出现“因超时而终止”的异常。我检查了其中一项测试的输入,需要处理大量数据,您可以在此处查看数据: https://hr-testcases-us-east-1.s3.amazonaws.com/25220/input03.txt?AWSAccessKeyId=AKIAR6O7GJNX5DNFO3PV&Expires=1642016820&Signature=J4ypdP0YzRxcOWp%2By5XaD5ITeMw%3D&response-content-type=text%2Fplain

它失败了,因为通过我的 IDE 处理具有相同输入的代码大约需要 2 分钟,但 HackerRank 测试仅限于 10 秒。

我需要您的帮助来优化代码并使其运行得更快。

嵌套循环似乎是这里最大的问题,但我不知道应该用什么替换它。

最佳答案

如果可以的话,不要构建中间列表。如果确实需要这样做(本问题不是这种情况),请改用生成器。

并且尽量不要重复自己,尽可能使用函数进行因式分解。

def countApplesAndOranges(home_start, home_end, tree_apple, tree_orange, apples, oranges):
def count_fruits(home_start, home_end, tree, fruits):
count = 0
for fruit in fruits:
if home_start <= tree + fruit <= home_end:
count +=1
return count

print(count_fruits(home_start, home_end, tree_apple, apples))
print(count_fruits(home_start, home_end, tree_orange, oranges))

关于python - 优化 Python 中的函数以处理大块数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70686292/

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