我有一个浮动的排序列表
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对象列表,用于分组。
答案 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)]