Skip to content

Instantly share code, notes, and snippets.

@duchenpaul
Created September 22, 2018 09:15
Show Gist options
  • Save duchenpaul/50b771c21deef5126c6ce238f6830617 to your computer and use it in GitHub Desktop.
Save duchenpaul/50b771c21deef5126c6ce238f6830617 to your computer and use it in GitHub Desktop.
Grouping data
def cluster(data, maxgap):
'''Arrange data into groups where successive elements
differ by no more than *maxgap*
>>> cluster([1, 6, 9, 100, 102, 105, 109, 134, 139], maxgap=10)
[[1, 6, 9], [100, 102, 105, 109], [134, 139]]
>>> cluster([1, 6, 9, 99, 100, 102, 105, 134, 139, 141], maxgap=10)
[[1, 6, 9], [99, 100, 102, 105], [134, 139, 141]]
'''
data.sort()
groups = [[data[0]]]
for x in data[1:]:
if abs(x - groups[-1][-1]) <= maxgap:
groups[-1].append(x)
else:
groups.append([x])
return groups
if __name__ == '__main__':
import doctest
print(doctest.testmod())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment