2015-10-28 1 views
0

en python, nous pouvons utiliser compteur pour trouver l'élément le plus commun dans une liste. Y a-t-il un moyen de transmettre la fonction, de sorte que nous puissions contrer l'élément qui tombe dans une certaine plage.Étant donné une liste de nombres, trouvez une plage fixe qui peut couvrir le plus grand nombre

Dites que j'ai [123, 127, 99,75,86, 83,81], je veux retourner le quelque chose comme {'12X': 2, '8X': 3, '99': 1, ' 75 ': 1}

Des idées?

+1

Quelque chose comme ceci: 'def func (l): return Counter (carte (lambda x: str (x/10) + 'x', l)) '? – Marii

Répondre

2

Qu'est-ce que vous essayez de faire, selon le contexte, peut-être:

Binning

C'est de regrouper vos éléments dans des bacs/seaux, soit de discrets taille égale ou prédéfinie. Cela fait facilement à l'aide des bibliothèques comme Pandas:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html

>>> pandas.cut([123, 127, 99, 75, 86, 83, 81], 4, labels=False) 
array([3, 3, 1, 0, 0, 0, 0]) 

(qui se lit "123 et 127 sont dans le groupe 3, 99 est en groupe un, et 75, 86, 83, 81 dans le groupe 0").

Clustering

C'est de regrouper vos éléments en grappes, quand vous ne connaissez pas les valeurs, mais ils savent qu'ils forment des groupes.

Comme "1, 2, 3, 11, 12, 13" est clairement deux groupes "1, 2, 3" et "11, 12, 13".

Une façon agréable et facile de regrouper des données est K-means mais il y a d'autres algorithmes, vous devriez jeter un oeil à scipy.

>>> import sklearn.cluster 
>>> import numpy as np 
>>> 
>>> kmeans = sklearn.cluster.KMeans(n_clusters=4) 
>>> kmeans.fit_predict(numpy.array([123, 127, 99, 75, 86, 83, 81]).reshape(-1, 1)) 
array([0, 0, 2, 3, 1, 1, 1], dtype=int32) 

Celui-ci a donné 123 et 127 ensemble, 99 seul, 75 seul, 81 83 86 ensemble.

Groupement

C'est un simple "GROUP BY" ala SQL, lorsque vous pouvez fournir une fonction qui renvoie le groupe où votre valeur doit être:

comme:

>>> from itertools import groupby 
>>> for key, group in groupby([123, 127, 99, 75, 86, 83, 81], lambda x: int(x/10)): 
...  print(key, list(group)) 
... 
12 [123, 127] 
9 [99] 
7 [75] 
8 [86, 83, 81]