我有一个元组数组形式的表。它有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)]
答案 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)]]