2017-09-24 13 views
0

J'ai créé une liste aléatoire par commande ci-dessous:Comment compter le nombre de valeurs dans la liste générée aléatoirement?

import random 
a=[random.randrange(0,100) for i in xrange(50)] 
print a 

Maintenant, ce qui pourrait être la commande pour compter le nombre de valeurs qui sont comprises entre 0 et 9, 10 et 19, 20 et 29, et ainsi de suite .

Je peux les imprimer comme ci-dessous:

import random 
a = [random.randrange(0,100) for i in xrange(50)] 
for b in a: 
    if b<10: 
    print b 

Mais, je ne sais pas comment écrire une commande pour compter le nombre des valeurs après l'impression b. Merci pour vos commentaires.

Répondre

1

un dictionnaire Assurez, énumérer et compter.

>>> import random 
>>> a = [random.randrange(0,100) for i in xrange(50)] 
>>> a 
[88, 48, 7, 92, 22, 13, 66, 38, 72, 34, 8, 18, 13, 29, 48, 63, 23, 30, 91, 40, 96, 89, 27, 8, 92, 26, 98, 83, 31, 45, 81, 4, 55, 4, 42, 94, 64, 35, 19, 64, 18, 96, 26, 12, 1, 54, 89, 67, 82, 62] 
>>> counts = {} 
>>> for i in a:  
     t = counts.setdefault(i/10,0) 
     counts[i/10] = t + 1 


>>> counts 
{0: 6, 1: 6, 2: 6, 3: 5, 4: 5, 5: 2, 6: 6, 7: 1, 8: 6, 9: 7} 
# Means: 0-9=> 6 numbers, 10-19=> 6 numbers etc. 
0

Vous pouvez utiliser bisect.bisect(...) pour atteindre cet objectif comme:

from bisect import bisect 
import random 

randon_nums = [random.randint(0,100) for _ in xrange(100)] 

bucket = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] # can also be created using: 
                #  range(10, 101, 10) 

randon_nums.sort() # sort the initial list in order to use it with `bisect` 

counts = [] 
last_bucket_count = 0 # to track the count of numbers in last calculated bucket 

for range_max in bucket: 
    i = bisect(randon_nums, range_max, end_index) 
    counts.append(i - last_bucket_count) 
    last_bucket_count = i 

Sample Run:

Lorsque la valeur de random_nums est:

>>> randon_nums 
[0, 1, 4, 5, 5, 5, 5, 6, 7, 7, 8, 8, 10, 10, 11, 11, 12, 13, 13, 13, 16, 17, 18, 18, 18, 18, 19, 20, 21, 22, 24, 24, 25, 25, 26, 26, 26, 26, 26, 29, 30, 30, 31, 33, 37, 37, 38, 42, 42, 43, 44, 44, 47, 47, 49, 51, 52, 55, 55, 57, 57, 58, 59, 63, 63, 63, 63, 64, 64, 65, 66, 67, 68, 71, 73, 73, 73, 74, 77, 79, 82, 83, 83, 83, 84, 85, 87, 87, 88, 89, 89, 90, 92, 93, 95, 96, 98, 98, 99, 99] 

le retour programme ci-dessus count comme:

>>> counts 
[ 14, 14, 14,  5,  8,  8,  10, 7, 12, 8] 
# ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
# 0-10 10-20 20-30 30-40 40-50 50-60 60-70 70-80 80-90 90-100 
1

si je vous ai bien compris, alors si:

import random 
a = [random.randrange(0,100) for i in xrange(50)] 
print len(filter(lambda x: 0 <= x < 10,a)) 
print len(filter(lambda x: 10 <= x < 20,a)) 

etc

0

En analyse de données et statistiques, cela s'appelle 'binning'. Si vous fouillez sur le net pour des termes comme «bin» et «bacs», vous trouverez une pléthore de pages sur les logiciels et la façon de le faire.

Mais un très bon utilise le produit prééminent pour Python, numpy.

>>> import random 
>>> a=[random.randrange(0,100) for i in range(50)] 
>>> from numpy import histogram 

Dans votre cas, vous avez besoin de mettre en place les points d'extrémité des bacs qui sont -0,5, 9,5, 19,5, 29,5, 39,5, 49,5, 59,5, 69,5, 79,5, 89,5 et 99,5. (J'ai choisi -0.5 pour le bas de gamme seulement car cela m'a facilité le calcul.) histogram compte le nombre d'items qui se trouvent dans chacune des plages données par ces nombres, pris par paires (-0.5 à 9.5, 9.5 à 19.5, etc.).

>>> bins = [-0.5+10*i for i in range(11)] 
>>> hist,_ = histogram(a, bins) 

Et voici le résultat.

>>> hist 
array([6, 6, 2, 6, 2, 3, 6, 9, 5, 5], dtype=int64) 
+0

Merci pour les informations fournies. – Nourolah

+0

Vous êtes les bienvenus. –