选择具有多个重复值的排序列表中的值周围的项目

时间:2015-06-22 20:20:43

标签: python list sortedlist multiplicity

我试图在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 个答案:

答案 0 :(得分:0)

如果您被允许使用median而不是average,那么您可以使用这个简单的解决方案:

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个元素。