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

Я пытаюсь выбрать некоторые элементы в списке Python. Список представляет собой распределение размеров некоторых других элементов, поэтому он содержит несколько повторяющихся значений.

После того, как я нахожу среднее значение в этом списке, я хочу выбрать те элементы, значение которых лежит между верхней границей и нижней границей вокруг этого среднего значения. Я могу сделать это легко, но он выбирает слишком много элементов (в основном потому, что распределение, с которым мне приходится работать, в значительной степени однородно). Поэтому я хотел бы иметь возможность выбирать границы, в которых следует выбирать значения, а также ограничивать разброс в поиске до 5 элементов ниже среднего и 5 элементов выше.

Я добавлю свой код (это очень просто).

    avg_lists = sum_lists/len(lists)

    num_list = len(list)
    if (int(num_comm/10)%2 == 0):
        window_size = int(num_list/10)
    else:
        window_size = int(num_list/10)-1

    out_file = open('chosenLists', 'w+')
    chosen_lists = []
    for list in lists:
         if ((len(list) >= (avg_lists-window_size)) & (len(list)<=(avg_lists+window_size))):
         chosen_lists.append(list)
    out_file.write("%s\n" % list)

1 ответ

Если вам разрешено использовать медиану вместо среднего, тогда вы можете использовать это простое решение:

def select(l, n):
    assert n <= len(l)
    s = sorted(l)           # sort the list
    i = (len(s) - n) // 2
    return s[i:i+n]         # return sublist of n elements from the middle

print select([1,2,3,4,5,1,2,3,4,5], 5)   # shows [2, 2, 3, 3, 4]

Функция select возвращается n элементы ближе всего к медиане.

Другие вопросы по тегам