I ont une série de points de données (tuples) dans une liste avec un format tel que:Regroupement des données de points en série
points = [(1, 'a'), (2, 'b'), (2, 'a'), (3, 'd'), (4, 'c')]
Le premier élément de chaque tuple est un nombre entier et ils sont assurés d'être triés. La deuxième valeur dans chaque tuple est une chaîne arbitraire.
J'ai besoin d'eux groupés dans les listes par leur première valeur dans une série. Donc, étant donné un intervalle de 3, la liste ci-dessus serait divisé en:
[['a', 'b', 'a', 'd'], ['c']]
j'ai écrit la fonction suivante, qui fonctionne très bien sur les petits ensembles de données. Cependant, il est inefficace pour les grandes entrées. Des conseils sur la façon de réécrire/optimiser/mininiser cela afin que je puisse traiter de grands ensembles de données?
def split_series(points, interval):
series = []
start = points[0][0]
finish = points[-1][0]
marker = start
next = start + interval
while marker <= finish:
series.append([point[1] for point in points if marker <= point[0] < next])
marker = next
next += interval
return series
Je ne suis pas sûr que je comprends votre groupe. Voulez-vous dire qu'avec l'intervalle 3, les groupes incluraient les plages clés 1..3, 4..6, 7..9, etc.? – Steve314
évaluation paresseuse résoudre votre problème de performance? itertools.groupby devrait presque faire ce que vous voulez – hop
steve, oui exactement –