python - 如何根据元素的值从数组中删除元素?
问题描述
我有一个看起来像这样的数据集:
data_minimas=[(660, 0.0), (680, 0.0), (710, 0.0), (712, 0.0), (715, 0.0), (717, 0.0), (754, 0.0),
(761, 0.0), (771, 0.0), (791, 0.0), (672, 3.2426156657036575e-09), (670, 5.621795915291507e-09),
(667, 6.999418784280287e-09), (638, 8.311660795399324e-09), (636, 1.021511167383812e-08),
(631, 1.03222580486856e-08), (634, 1.0889880297950812e-08), (757, 1.6140627900857082e-08),
(733, 1.7310942425399663e-08), (785, 1.9027900568574484e-08), (729, 2.246316334112827e-08),
(722, 2.5603465440057234e-08), (725, 2.6043967762809732e-08)]
它是一个元组列表。我需要删除具有零值的元组。这始终是该对中的第二个值。从理论上讲,我认为这很容易,但我还没有到任何地方。这是我试过的:
for i in range(0,len(data_minimas)):
if data_minimas[i][1]==0.0:
del(data_minimas[i][1])
else:
pass
但这只是删除了 0.0 值,我需要它来删除整个元组。如果我尝试:
for i in range(0,len(data_minimas)):
if data_minimas[i][1]==0.0:
del(data_minimas[i])
else:
pass
我认为可行,但出现索引错误。我究竟做错了什么?
解决方案
>>> data_minimas = [i for i in data_minimas if i[1] != 0.0]
>>> data_minimas
[(672, 3.2426156657036575e-09),
(670, 5.621795915291507e-09),
(667, 6.999418784280287e-09),
(638, 8.311660795399324e-09),
(636, 1.021511167383812e-08),
(631, 1.03222580486856e-08),
(634, 1.0889880297950812e-08),
(757, 1.6140627900857082e-08),
(733, 1.7310942425399663e-08),
(785, 1.9027900568574484e-08),
(729, 2.246316334112827e-08),
(722, 2.5603465440057234e-08),
(725, 2.6043967762809732e-08)]
推荐阅读
- python - 循环内的 Python 工作日
- mysql - 如何根据mysql中其他两列的数据在列中插入数据
- c# - 如何实例化泛型类
- xml - Powershell 中的 XML 解析
- azure - 在虚拟机上运行命令失败并阻止其他“Invoke-AzureRmVMRunCommand”
- python - 在 Pandas 中,在 grouby 和 pd.cut 之后,如何重新排列数据框以随时间按每个 bin 绘制?
- maven - Maven,替换文件中的令牌以进行调试和编译
- javascript - 如何访问 JS 函数
- kubernetes - Openshift 4.2 OLM - 操作员依赖
- javascript - MDC - 无法初始化文本输入