切割大型Python列表

2024-05-13 02:54:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子

defaultdict(list,
            {37.0: ['C22H27O7',
              'C21H23O8',
              'C25H35O7',
              'C24H31O8',
              'C23H27O9',
              'C22H23O10',
              'C21H19O11',
              'C20H15O12',
              'C19H11O13'],
             111.0: ['C22H27O7',
              'C19H15O10',
              'C25H35O7',
              'C22H23O10',
              'C24H31O8',
              'C21H19O11',
              'C23H27O9',
              'C20H15O12',
              'C19H11O13'],
             74.0: ['C21H23O8',
              'C19H15O10',
              'C25H35O7',
              'C23H27O9',
              'C24H31O8',
              'C22H23O10',
              'C21H19O11',
              'C20H15O12',
              'C19H11O13'],
             148.0: ['C25H35O7',
              'C21H19O11',
              'C24H31O8',
              'C20H15O12',
              'C23H27O9',
              'C19H11O13'],
             185.0: ['C25H35O7', 'C20H15O12', 'C24H31O8', 'C19H11O13'],
             222.0: ['C25H35O7', 'C19H11O13']})

我有一个calculateMass函数

def calculateMass(formula):
    if(formula[0:1] == "C"):
           # print(add[k]1:3)
        C = int(formula[1:3])
        C = C*12000    
        print(C)
    if(formula[3:4] == "H"):
        H = (int(formula[4:6]))
        H = H*1008
    if(formula[6:7] == "O"):
        O=(int(formula[7:9]))
        O=O*15995
    total = O + C + H
    print(total)

我的目标是根据质量削减我的列表,例如,我期望的输出应该是:

[1] 37 --> C22H27O7--> C21H23O8 (Cut From here because next element's mass [C25H35O7] > [C21H23O8])

[2] 37 --> C25H35O7 --> C24H31O8 --> C23H27O9 --> C22H23O10 --> C21H19O11 --> C20H15O12 --> C19H11O13 (Since masses are decreasing we do not need to cut.)

并迭代其他键值

[1] 111 --> ......

如何在Python中执行此操作?你知道吗


Tags: ifintprintformulac22h23o10c22h27o7c21h19o11c24h31o8
2条回答

您没有指定myList的外观,但是假设它只是一个公式字符串列表,您可以执行以下操作:

from collections import defaultdict

group_dict = defaultdict(list)
for item in my_list:
    group_dict[calculateMass(item)].append(item)

这样,您将得到一个字典,它的键将是mass,它的值将是公式列表。你知道吗

然后可以使用

for key in sorted(group_dict.keys()):
    print(key, group_dict[key])

打印按质量排序的子列表。你知道吗

如果您想对每个原始字典的列表执行此操作,我建议您将整个内容放在一个函数中,并为要处理的每个列表调用它。你知道吗

假设您只需要输出(而不是另一个具有拆分列表的数据结构),您可以迭代公式列表,将每个值calculateMass(myList[index][i])与前一个值calculateMass(myList[index][i-1])进行比较,如下所示:

for index in myList:
    count = 1
    print("[", count, "]", index)
    print(myList[index][0])
    for i in range(1,len(myList[index])):
        if calculateMass(myList[index][i]) > calculateMass(myList[index][i-1]):
            count += 1
            # print("  cut  ")
            print("[", count, "]", index)
        print(myList[index][i])

相关问题 更多 >