删除后列表中仍为零(Python)

2024-10-03 21:26:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Prob下面有一个列表,当我尝试删除0或删除0.0时,它有时不会从列表中删除,或者列表中还有0的“另一个版本”。由于不可能列出零的所有可能的十进制增量,我如何确保从列表中删除零的所有“味道”

 x = [0.0,
 0.0,
 0,
 0.0009765625,
 0.0003255208333333333,
 0.0021158854166666665,
 0.005045572916666667,
 0.013020833333333334,
 0.019856770833333332,
 0.0107421875,
 0.004557291666666667,
 0.000]
    
if 0 in probability_perpoint:
    probability_perpoint.remove(0)
if 0.0 in probability_perpoint:
    probability_perpoint.remove(0.0)

`print(x)` # still prints 0's!

Tags: in版本列表ifprints增量removeprobability
3条回答

只要用list comprehension这样做

x = [0.0,0.0,0,0.0009765625,0.0003255208333333333,0.0021158854166666665,0.005045572916666667,0.013020833333333334,0.019856770833333332,0.0107421875,0.004557291666666667,0.000]
x = [i for i in x if i != 0]
print(x)

演示:https://rextester.com/NAVN53491

remove()while的另一种方式

x = [0.0,0.0,0,0.0009765625,0.0003255208333333333,0.0021158854166666665,0.005045572916666667,0.013020833333333334,0.019856770833333332,0.0107421875,0.004557291666666667,0.000]
try:
    while True:
        x.remove(0)
except ValueError:
    pass
 
print(x)

演示:https://rextester.com/YTXM11780

Python的过滤函数非常适合解决这个问题。 您可以以匿名lambda函数的形式指定筛选条件作为第一个参数,并将要筛选的列表作为第二个参数

x = [0.0,
 0.0,
 0,
 0.0009765625,
 0.0003255208333333333,
 0.0021158854166666665,
 0.005045572916666667,
 0.013020833333333334,
 0.019856770833333332,
 0.0107421875,
 0.004557291666666667,
 0.000]
    
result = list(filter(lambda n: n!=0, x))

print(result)

请注意,您必须将结果转换为列表

list.remove只删除第一个匹配项,因此您应该从头开始构建列表,因为重复删除代价高昂。此外,如果这些是某些计算的结果并且存在舍入误差,您可能希望查看math.isclose

import math

x[:] = [e for e in x if not math.isclose(e, 0)]

相关问题 更多 >