列表中的“分组”项目

时间:2019-12-15 23:10:09

标签: python python-3.x

我有 我想与其他列表分组的[string, int,int],[string, int,int]...种列表

[string1, int1,int1] + [string2, int2,int2] = ["string+string2", int1+int1+int2+int2]

历史就像我已经建立了导入函数来获取化合物一样:

ex [Ch3,15.3107,15.284]有点像这样...

我有一个给我的功能: dictionary{0:"CH3"} 另一个给我的: List ["CH3",30.594700000000003]

def group_selectec_compounds(numCompound,values)

值可以是包含所有内容的列表的列表 我也做了dic这样的{0:["CH4"],...} numCoumpound应该是各种变量(我认为)还是键的元组?这样我就可以为用户做数学了。

最后,我想要类似的内容:["CH3+CH4",61.573] 也可以是:["CH3+CH4+H2SO4",138.773]

2 个答案:

答案 0 :(得分:0)

我将使用'+'.joinsum和理解来解决此问题:

>>> data = [['string1', 2, 3], ['string2', 4, 5], ['string3', 6, 7]]
>>> ['+'.join(s for s, _, _ in data), sum(x + y for _, x, y in data)]
['string1+string2+string3', 27]

答案 1 :(得分:0)

首先,创建一个字典来存储类型的位置:

helper = {}
for elem in lst1:
  elemType = str(type(elem))
  if elemType not in helper:
    helper[elemType] = lst1.index[elem]

现在您有了一个字典,可以按类型索引原始列表,您只需要运行第二个列表并相应地追加:

for elem in lst2:
  elemType = str(type(elem))
  if elemType not in helper:
    #in case list 2 contains a type that list 1 doesn't have
    lst1.append(elem)
    helper[elemType] = lst1.index[elem]
  else:
    lst1[helper[elemType]] += elem

希望这很有道理!我并没有为了正确性而对此进行审查,但是想法就在那里。

编辑:这也不能解决列表1中包含多于1个字符串或大于1个int等的问题,但是根据您希望如何解决该问题,解决该问题应该是微不足道的。

2nd Edit:这个答案是通用的,因此,无论如何排序列表中的字符串和整数都无关紧要,实际上,lst1可以是[string,int,double],而lst2可以是[int,double,字符串],它仍然可以正常使用,因此在列表顺序更改的情况下非常可靠