为了账号安全,请及时绑定邮箱和手机立即绑定

无法从 python 列表中完全删除零

无法从 python 列表中完全删除零

绝地无双 2023-10-26 10:24:27
我有两个清单x=[0.0, -0.9000000000000199, 2.1499999999999773, 1.799999999999983, -1.5000000000000284, -2.3500000000000227, -3.05000000000004, 2.0999999999999943, 3.9999999999999716, 1.8499999999999943, -4.650000000000006, 11.349999999999994]y=[-5.750000000000028, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]我使用下面的逻辑来完全删除零。但 y 的零并未完全删除。for i in x:    if i==0:        x.remove(i)for j in y:    if j==0:        y.remove(j)        print(x)print(y)我得到的输出如下,即我的 y 列表中仍然有零。[-0.9000000000000199, 2.1499999999999773, 1.799999999999983, -1.5000000000000284, -2.3500000000000227, -3.05000000000004, 2.0999999999999943, 3.9999999999999716, 1.8499999999999943, -4.650000000000006, 11.349999999999994][-5.750000000000028, 0.0, 0.0, 0.0, 0.0, 0.0]
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

迭代列表时不应从列表中删除元素。相反,使用列表理解:

x=[e for e in x if e]
y=[e for e in y if e]


查看完整回答
反对 回复 2023-10-26
?
慕慕森

TA贡献1856条经验 获得超17个赞

“remove”方法仅删除第一次出现的提供值:


def remove(self, *args, **kwargs): # real signature unknown

    """

    Remove first occurrence of value.

    

    Raises ValueError if the value is not present.

    """

    pass

要从列表中删除所有值,您可以使用以下小方法:


def remove_all_values_from_list(l, val):

    for i in range(l.count(val)):

        l.remove(val)

输出:


[-0.9000000000000199, 2.1499999999999773, 1.799999999999983, -1.5000000000000284, -2.3500000000000227, -3.05000000000004, 2.0999999999999943, 3.9999999999999716, 1.8499999999999943, -4.650000000000006, 11.349999999999994]

[-5.750000000000028]


查看完整回答
反对 回复 2023-10-26
?
慕的地10843

TA贡献1785条经验 获得超8个赞

尝试使用 y = [i for i in y if i != 0]



查看完整回答
反对 回复 2023-10-26
  • 3 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信