访问数组中的分组项

时间:2011-09-10 20:34:04

标签: python arrays list grouping

我是Python的新手并且有一个数字列表。例如 5,10,32,35,64,76,23,53...

我使用this post中的代码将它们分为四个(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)。

4 个答案:

答案 0 :(得分: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 :(得分:1)

好的,每次迭代时,这是{{1}个四元组的元组。因此,将整个事物转换为列表:

yield

然后你会得到一个元组列表:

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

你可以通过这种方式获得每个元组中的第一个项目:

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

(当然还有其他方法。)

答案 2 :(得分:1)

你已经创建了一个元组元组,元组列表,列表列表,或列表元组,或者其他......

您可以直接访问任何嵌套列表中的任何元素:

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

您还可以通过迭代顶部结构来访问嵌套结构:

for list in lists:
    print list[y]

答案 3 :(得分:1)

你的应用程序可能有点过分,但你应该看看我的库,熊猫。使用GroupBy功能,这样的东西非常简单:

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

要做一次4件事,你需要计算一个bucketing数组:

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

然后它就像:

一样简单
data.groupby(buckets).mean()