搜索浮动列表

时间:2017-12-04 16:47:00

标签: python python-3.x

我有一个浮动的排序列表

l = [50.1234,50.1221,50.1200,51.5022,51.5021,51.4999,60,002,60.0023,60.0021]

我想根据百万分之一的差异对所有花车进行分组。我有一个功能:

def ComputePPMError(t,e):
    return (((e- t) /t) * 1e6)

最有效的方法是什么?一般来说,我将有一个具有浮动属性的对象列表,我将希望对对象列表做同样的事情。例如:

class MZ:
    def __init__(self):
        self.FileID = ""
        self.Mass = 0
        self.Intensity = 0
        self.RT = 0
        self.ScanNumber = 0

现在列表将是list = [MZ objects]

所以最终结果将是dictionary of {average mass : list of mz objects}在这个例子中应该有三个条目

结果如下:

l = [{mz1:list of mz Objects (3 entries)},{mz2:list of mz Objects (3 entries)},{mz3:list of mz Objects (3 entries)}

因此,在上面的结果中,最终列表包含一个dict,其中键是mz值作为averages,值是mz对象列表,用于分组。

1 个答案:

答案 0 :(得分:0)

以下是已排序浮点列表的解决方案:

def interval_groups(l, interval):
    return [[item for item in l if item >= i and item < (i + interval)] for i in range(int(l[0]), int(l[-1])+1, interval)]

l = [50.1234, 50.1221, 50.1200, 51.5022, 51.5021, 51.4999, 60.002, 60.0023, 60.0021]

group_list = interval_groups(l, 1)
print(group_list)

group_dict = {sum(group)/len(group):group for group in group_list if group}
print(group_dict)

输出:

[[50.1234, 50.1221, 50.12], [51.5022, 51.5021, 51.4999], [], [], [], [], [], [], [], [], [60.002, 60.0023, 60.0021]]
{50.121833333333335: [50.1234, 50.1221, 50.12], 51.5014: [51.5022, 51.5021, 51.4999], 60.002133333333326: [60.002, 60.0023, 60.0021]}

以下是interval_groups函数的更清晰版本:

def interval_groups(l, interval):
    """interval must be integer"""
    ret_list = []
    first_item_as_int = int(l[0])
    last_item_as_int = int(l[-1])
    for i in range(first_item_as_int, last_item_as_int + 1, interval):
        interval_list = [item for item in l if item >= i and item < (i + interval)]
        ret_list.append(interval_list)

    return ret_list

修改

我删除了start_value,您可以将列表MZ对象的功能修改为:

def interval_groups(list_of_MZ, interval):
    return [[item for item in list_of_MZ if item.mass >= i and item.mass < (i + interval)] for i in range(int(list_of_MZ[0].mass), int(list_of_MZ[-1].mass)+1, interval)]