2011-09-10 14 views
1

私はPythonを初めて使い、数字のリストを持っています。例えば 5,10,32,35,64,76,23,53...配列内のグループ化された項目へのアクセス

と私はthis postのコードを使用してそれらを4つにグループ分けしました(5,10,32,3564,76,23,53など)。

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") 

個々のアレイにアクセスして機能を実行するにはどうすればよいですか。たとえば、すべてのグループの最初の値の平均値を取得したいとします(例:5 and 64)。

答えて

2

あなたはタプルの次のタプルを持っているとしましょう:

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

forループを使用、各タプルの最初の要素にアクセスするには:

for i in a: 
    print i[0] 

最初の値の平均を計算するには:

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

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

これは、反復されるたびに4つの数字のタプルが表示されます。これはyieldです。だから、リストに全体を変換します

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

その後、あなたはタプルのリストを持っています:

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

あなたは各タプルでこのように最初の項目を取得することができます。

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

(もちろん、他の方法があります。)

1

あなたはタプルを作成しましたタプルのリスト、タプルのリスト、リストのリスト、リストのタプル、その他何でも入力できます。

直接yのネストされたリスト:

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

あなたは、トップの構造を反復することにより、ネストされた構造にアクセスすることができます

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

標準のクラス名である 'list'を再定義しています。お勧めしません。 –

+0

そうですね、通常はやりませんが、Python構文の強調表示は例で役立ちます。 – inlinestyle

1

は、アプリケーションのやり過ぎかもしれないが、あなたは私のライブラリをチェックアウトする必要があり、パンダ。このようなものはGROUPBY機能を持つ非常に単純です:

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

あなたはバケット配列を計算する必要があるだろう4-AT-時の事を行うには:

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

そして、それはようです

data.groupby(buckets).mean() 
関連する問題