首页 > 解决方案 > 如何根据元素的值从数组中删除元素?

问题描述

我有一个看起来像这样的数据集:

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

我认为可行,但出现索引错误。我究竟做错了什么?

标签: pythonarraysfor-loopif-statement

解决方案


>>> 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)]

推荐阅读