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

2024-04-23 19:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道我应该使用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快得多,但是还有什么可以显著提高时间消耗的吗?你知道吗


Tags: key代码inimportfor过程sysline
1条回答
网友
1楼 · 发布于 2024-04-23 19:17:00

请尝试以下方法:

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)]

相关问题 更多 >