循环遍历一张大桌子的两个字段

时间:2014-06-13 22:43:07

标签: python

我有一个元组数组形式的表。它有500,000行,每行有25个字段。假设第一和第二个字段是坐标的x和y,对于每个(x,y),我想用所有(x,y)遍历所有行。

我无法想到这样做的有效方法。

另一点是虽然行数很多,但唯一x的数量大约是50。

all_x= set([table[i][0] for i in range(len(table))])  #len(all_x) is around 50

无论如何,我甚至无法想到一种方法来循环使用相同的(x,y)行,而不会多次遍历整个表。

简化的样本数据

每行3个,每行3个字段。 [(0,0,5),(0,0,10),(1,5,3),(1,3,4),(1,5,10),(2,4,30),( 1,5,30)]

我希望能够将其分为[(0,0,5),(0,0,10)]和[(1,5,3),(1,5,10),(1, 5,30']和[(1,3,4)]和[(2,4,30)]

1 个答案:

答案 0 :(得分:2)

from itertools import groupby
l = [(0,0, 5), (0,0, 10), (1,5, 3), (1,3 ,4) ,(1,5, 10), (2,4, 30), (1,5, 30)]
a = sorted(l, key=lambda x: x[0:2])
[list(group) for key, group in groupby(a, lambda x: x[0:2])]

输出

[[(0, 0, 5), (0, 0, 10)],
[(1, 3, 4)],
[(1, 5, 3), (1, 5, 10), (1, 5, 30)],
[(2, 4, 30)]]