首页 > 解决方案 > 如何根据多个条件删除列表列表中的某些元素,其中也包括元素的总和

问题描述

我有这样的数据。

[[begin],
[type, 91],
[point, 1450.0, 789.5, 3.5, 2.44207E+08],
[track, 61, 34753.6445, 0.18736, -0.14534, -0.97148, -1],
[track, 2212, 938.2723, 0.00000, 0.00000, 0.00000, -1],
[info, 2, 949108, 5.4972E-10],
[track, 18, 7571.8184, -0.10435, -0.18949, -0.98617, -2],
[track, 113, 14058.4375, 0.23803, -0.14617, -0.96087, -2],
[track, 113, 10121.6787, 0.28336, -0.14348, -0.94822, -2],
[track, 2212, 2194.4082, 0.28044, -0.00229, -0.95987, -2],
[track, 21, 1745.5736, 0.30398, -0.25261, -0.91858, -2],
[track, 2212, 939.8723, -0.50622, -0.54921, -0.66492, -2],
[track, 212, 950.5656, -0.97206, -0.19458, 0.13131, -2],
[track, 2212, 2194.4082, 0.28044, -0.00229, -0.95987, 0],
[track, 21, 1745.5736, 0.30398, -0.25261, -0.91858, 0],
[track, 2212, 939.8723, -0.50622, -0.54921, -0.66492, 0],
[track, 212, 950.5656, -0.97206, -0.19458, 0.13131, 0],
[track, 61, 2868.8396, -0.21026, 0.0310, -0.97718, 0],
[track, 11, 1910.0385, -0.08027, -0.21739, -0.97278, 0],
[track, 11, 1944.7386, 0.05074, -0.18072, -0.98222, 0],
[track, -21, 848.2019, -0.13192, -0.59527, -0.79262, 0],
[track, 21, 6132.1333, 0.29963, -0.18552, -0.94129, 0],
[track, -21, 7926.3042, 0.18966, -0.13053, -0.97313, 0],
[track, 21, 4186.8740, 0.38838, -0.12646, -0.91278, 0],
[track, -21, 5964.8052, 0.20810, -0.18427, -0.96587, 0]]

在此数据中,我想留下一些列表并将其余部分写入其他文件。

条件:

  1. 具有list[0]as 'track'list[1]as18list[-1]as的列表'-2',我希望list[2]将该列表调用为'a'
  2. 所有带有list[0]as'track'list[-1]as 的列表'0',我想从中提取信息;期望这些列表;

    2.1。列出list[1]as61和之后的一个,直到sum(list[2])等于'a'应该留下。

    2.2. 之后的清单应该再次被采纳。

我写的代码:

E_dummy=[]
E_had=[]

for i in event:
    if i[0]=='track':
        if i[6]=='-2':
            if (i[1]=='18' or i[1]=='-18'):
                b=float(i[2])
        if i[6]=='0':

            if (i[1]=='61' or i[1]=='-61'):
                flag='0'
                pass
            if flag=='0':
                E_dummy.append(float(i[2]))
                c=sum(E_dummy)
                if abs(np.subtract(b,c))<=0.5:
                    flag='1'
                    pass


            if flag=='1':
                E_had.append(float(i[2]))`

但我没有得到想要的结果。

作为输出的预期列表是:

[track, 2212, 2194.4082, 0.28044, -0.00229, -0.95987, 0],
[track, 21, 1745.5736, 0.30398, -0.25261, -0.91858, 0],
[track, 2212, 939.8723, -0.50622, -0.54921, -0.66492, 0],
[track, 212, 950.5656, -0.97206, -0.19458, 0.13131, 0],
[track, 21, 6132.1333, 0.29963, -0.18552, -0.94129, 0],
[track, -21, 7926.3042, 0.18966, -0.13053, -0.97313, 0],
[track, 21, 4186.8740, 0.38838, -0.12646, -0.91278, 0],
[track, -21, 5964.8052, 0.20810, -0.18427, -0.96587, 0]

标签: pythonlist

解决方案


您无法获得所需结果的主要原因是您将数字与字符串进行比较。数据中的整数61永远不能等于语句'61'中的字符串。if

鉴于您的数据处理方式,您可能会考虑学习使用 PANDAS 数据框或 NumPy 数组。这将允许您将列视为列表,这将使您的某些逻辑更直接。


推荐阅读