python - 如何根据多个条件删除列表列表中的某些元素,其中也包括元素的总和
问题描述
我有这样的数据。
[[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]]
在此数据中,我想留下一些列表并将其余部分写入其他文件。
条件:
- 具有
list[0]
as'track'
、list[1]
as18
和list[-1]
as的列表'-2'
,我希望list[2]
将该列表调用为'a'
。 所有带有
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]
解决方案
您无法获得所需结果的主要原因是您将数字与字符串进行比较。数据中的整数61
永远不能等于语句'61'
中的字符串。if
鉴于您的数据处理方式,您可能会考虑学习使用 PANDAS 数据框或 NumPy 数组。这将允许您将列视为列表,这将使您的某些逻辑更直接。
推荐阅读
- html - Angular组件应用父指定样式
- elasticsearch - Search Guard 未初始化 (SG11)
- r - 如何使用 R 中的 MICE 包估算丢失的数据?
- javascript - 在 ChartJS 中重新创建此图
- javascript - 如何通过回调为变量赋值?
- python - 有没有办法从外部对字典进行排序
- android - 在创建移动应用程序时,我们如何摆脱 android 和 ios 环境?
- mysql - 向 mysql gcp 实例添加私有 IP 时出现问题
- cucumber - 如何在 WebdriverIO 中使用 Cucumber 标签运行“标记”场景
- vue.js - 在构建时更改 manifest.json 文件中的属性