对包含100000个元素的列表中的元素进行排序和访问

时间:2016-01-14 18:39:40

标签: python sorting numpy

我知道我应该使用NumPy和我所拥有的列表一样的大数组,但我不能,因为我正在解决Kattis上的一个问题(一个有问题的网站,你必须提交代码,他们编译它)并使用行import numpy提交代码会产生运行时错误。 我认为花费最多时间的过程是我阅读和排序所有数据。我阅读并按照这样排序:

def readData():
    import sys
    lines = [line.strip() for line in sys.stdin]
    points = [tuple([int(num) for num in line.split(" ")]) for line in lines] #we have a list of tuples: [(x1, y1), ... (xn, yn)]
    sortedBySums = sorted(points, key = lambda x: (sum(x), x[0]))
    sortedBySub = sorted(points, key = lambda x: (sub(x), x[0]))

稍后我也会访问表sortedBySumssortedBySubs的元素,所以也许我也可以加快查找速度,但不知道怎么做。我正在使用list.index(element)进行元素查找。此外,sub(x)函数只是从第一个坐标中减去第二个坐标。

有什么方法可以加快这个过程吗? sort内置函数应该非常快,从我学到的内容和使用for loop这样的for loop也应该比使用常规UIGraphicsGetCurrentContext()快得多,但还有其他的东西吗?可以大大改善时间消耗吗?

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

points = [(int(line[i]), int(line[i+1])) for i in range(0,len(line)-1,2) for line in sys.stdin]

而不是:

lines = [line.strip() for line in sys.stdin]
points = [tuple([int(num) for num in line.split(" ")]) for line in lines] #we have a list of tuples: [(x1, y1), ... (xn, yn)]