2011-09-10 3 views
1

Je suis novice en Python et j'ai une liste de nombres. par exemple. 5,10,32,35,64,76,23,53....Accéder aux éléments groupés dans les tableaux

et je les ai regroupées en quatre pattes (5,10,32,35, 64,76,23,53 etc ..) en utilisant le code de this post.

def group_iter(iterator, n=2, strict=False): 
    """ Transforms a sequence of values into a sequence of n-tuples. 
    e.g. [1, 2, 3, 4, ...] => [(1, 2), (3, 4), ...] (when n == 2) 
    If strict, then it will raise ValueError if there is a group of fewer 
    than n items at the end of the sequence. """ 
    accumulator = [] 
    for item in iterator: 
     accumulator.append(item) 
     if len(accumulator) == n: # tested as fast as separate counter 
      yield tuple(accumulator) 
      accumulator = [] # tested faster than accumulator[:] = [] 
      # and tested as fast as re-using one list object 
    if strict and len(accumulator) != 0: 
     raise ValueError("Leftover values") 

Comment puis-je accéder aux différentes baies pour pouvoir exécuter des fonctions sur ces dernières. Par exemple, j'aimerais obtenir la moyenne des premières valeurs de chaque groupe (par exemple 5 and 64 dans mes numéros d'exemple).

Répondre

2

Disons que vous avez le tuple suivant de tuples:

a=((5,10,32,35), (64,76,23,53)) 

Pour accéder au premier élément de chaque tuple, utilisez une boucle for:

for i in a: 
    print i[0] 

Pour calculer la moyenne pour les premières valeurs:

elements=[i[0] for i in a] 

avg=sum(elements)/float(len(elements)) 
1

Ok, c'est yield en utilisant un tuple de quatre nombres chaque fois qu'il est itéré. Alors, convertir le tout à une liste:

L = list(group_iter(your_list, n=4)) 

Ensuite, vous aurez une liste de tuples:

>>> L 
[(5, 10, 32, 35), (64, 76, 23, 53), ...] 

Vous pouvez obtenir le premier élément de chaque tuple ainsi:

firsts = [tup[0] for tup in L] 

(Il existe d'autres moyens, bien sûr.)

1

Vous avez créé un tuple de tuples, ou une liste de tuples, ou une liste de listes, ou un tuple de listes, ou autre ...

Vous pouvez accéder à n'importe quel élément d'un liste imbriquée y directement:

toplist[x][y] # yields the yth element of the xth nested list 

Vous pouvez également accéder aux structures imbriquées par itérer sur la structure supérieure:

for list in lists: 
    print list[y] 
+0

Vous redéfinissez 'list', qui est un nom de classe standard. Non recommandé. –

+0

Oui, normalement, j'évite de faire cela, mais la mise en évidence de la syntaxe python aide dans les exemples. – inlinestyle

1

est peut-être surpuissant pour votre application, mais vous devriez vérifier ma bibliothèque, pandas géants. Des choses comme cela est assez simple avec la fonctionnalité GroupBy:

http://pandas.sourceforge.net/groupby.html

Pour faire le 4-à-un-temps chose que vous auriez besoin de calculer un tableau héliporté:

import numpy as np 
bucket_size = 4 
n = len(your_list) 
buckets = np.arange(n) // bucket_size 

Ensuite, il est aussi simple comme:

data.groupby(buckets).mean() 
Questions connexes