Python 需要加快我的算法吗

Python 需要加快我的算法吗,python,algorithm,performance,math,Python,Algorithm,Performance,Math,我需要让我的程序更快,但我就是不知道怎么做。问题就在这里。我有一系列的数字排序如下: 7 4 8 2 5 9 1 3 6 10 7 \ 4 8 \ \ 2 5 9 \ \ \ 1 3 6 10 我必须根据输入输出一个数字。输入是两个整数,把它们看作x和y坐标。x是我离开左边的多少,y是我离开底部的多少。假设x和y是1和1,那么我必须输出5 7 4 8 2-5 9 | 1 3 6 10 现在,我的代码可以正常工作并得到正确的数字,但速度太慢了 def a

我需要让我的程序更快,但我就是不知道怎么做。问题就在这里。我有一系列的数字排序如下:

7
4 8
2 5 9
1 3 6 10

 7
  \
 4 8
  \ \
 2 5 9
  \ \ \
 1 3 6 10
我必须根据输入输出一个数字。输入是两个整数,把它们看作x和y坐标。x是我离开左边的多少,y是我离开底部的多少。假设x和y是1和1,那么我必须输出5

 7

 4 8

 2-5 9
   |
 1 3 6 10
现在,我的代码可以正常工作并得到正确的数字,但速度太慢了

def answer(x, y):
    last_num = 1
    arr_hold = [[1]]
    for i in range(2, x+(y+2)):
        reg_hold = []
        for j in range(last_num + 1, i + last_num + 1):
            if j == (i + last_num + 1) - 1:
                last_num = j
            if i == (x+(y+2)) - 1:
                reg_hold.append(j)
    print reg_hold
    return reg_hold[x]
我能做些什么来加快速度吗?
最大x或y值可以是100000,最小值为0,将输入存储为列表列表。将刚读到的列表倒过来。那么索引就很简单了

m = [[7], [4, 8], [2, 5, 9], [1, 3, 6, 10]] 
m = m[::-1] # reverse m = [[1, 3, 6, 10], [2, 5, 9], [4, 8], [7]] 
x = 1 
y = 1 
print m[x-1][y-1]

将输入存储为列表列表。将刚读到的列表倒过来。那么索引就很简单了

m = [[7], [4, 8], [2, 5, 9], [1, 3, 6, 10]] 
m = m[::-1] # reverse m = [[1, 3, 6, 10], [2, 5, 9], [4, 8], [7]] 
x = 1 
y = 1 
print m[x-1][y-1]

这个问题有一个封闭的解决方案。下面一行的数字是三角形数字。您可以使用
n*(n+1)//2
计算它们。您可以通过计算右
n
并从其生成的三角形数中进行偏移来获得结果:

def answer(x, y):
    n = x + y + 1
    return n*(n+1)//2 - y

这个问题有一个封闭的解决方案。下面一行的数字是三角形数字。您可以使用
n*(n+1)//2
计算它们。您可以通过计算右
n
并从其生成的三角形数中进行偏移来获得结果:

def answer(x, y):
    n = x + y + 1
    return n*(n+1)//2 - y

@乌里埃利你什么意思?我告诉过你,x是向右移动的次数,y是向上移动的次数。分析模式。很明显,一个数字和它的坐标是有关系的。如果你能弄清楚它是什么,就没有必要做循环。如果你的代码没有错误,一个更好的地方可以问。@Urielli你是什么意思?我告诉过你,x是向右移动的次数,y是向上移动的次数。分析模式。很明显,一个数字和它的坐标是有关系的。如果你能弄清楚它是什么,就不需要做循环。如果你的代码没有错误,那么一个更好的地方是。存储像:[[1]、[2,3]、[4,5,6]]这样的列表不是更好吗?存储像:[[1]、[2,3]、[4,5,6]]这样的列表不是更好吗?啊,我觉得这应该适用于任何数组列表:-)啊,我觉得这应该适用于任何数组列表:-)