Доступ к сгруппированным элементам в массивах - PullRequest
1 голос
/ 11 сентября 2011

Я новичок в Python и у меня есть список номеров.например, 5,10,32,35,64,76,23,53....

, и я сгруппировал их по четверкам (5,10,32,35, 64,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 ]

2 голосов
/ 11 сентября 2011

Допустим, у вас есть следующий кортеж:

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 голос
/ 11 сентября 2011

Может быть, излишне для вашего приложения, но вы должны проверить мою библиотеку, панды. Вещи, как это довольно просто с функциональностью GroupBy:

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

Чтобы выполнить 4 операции за один раз, вам нужно вычислить массив распределения:

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

Тогда это так просто, как:

data.groupby(buckets).mean()
1 голос
/ 11 сентября 2011

Вы создали кортеж кортежей, или список кортежей, или список списков, или кортеж списков, или любой другой ...

Вы можете получить доступ к любому элементу любого вложенного списка напрямую:

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

Вы также можете получить доступ к вложенным структурам, просматривая верхнюю структуру:

for list in lists:
    print list[y]
1 голос
/ 11 сентября 2011

Хорошо, это 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]

(Конечно, есть и другие способы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...