Zero still in list after deletion (Python) 删除后,列表中仍然存在零(Python)

6 浏览
0 Comments

Zero still in list after deletion (Python) 删除后,列表中仍然存在零(Python)

我有一个下面的Prob列表,当我尝试删除0或删除0.0时,有时它不会从列表中删除,或者列表中仍然存在'another version'的0。我该如何确保从列表中删除所有'flavors'的零,因为不可能列出所有可能的零的小数增量呢?

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) # 仍然打印出0!

0
0 Comments

问题的原因是在使用Python的filter函数时,删除列表中的零值后,零值仍然存在于列表中。解决方法是将结果转换为列表。

在Python中,filter函数非常适合解决这个问题。您可以将筛选条件以匿名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)

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

0
0 Comments

Zero still in list after deletion (Python)这个问题的出现原因是list.remove只会移除第一个出现的元素,因此在重复删除操作时会非常耗时。此外,如果这些元素是某些计算的结果,并且受到舍入误差的影响,你可能需要使用math.isclose来判断是否接近零。

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

是解决这个问题的方法。

0
0 Comments

在Python中,有时候我们需要从列表中删除特定的元素,但是在删除后,有时会发现元素仍然存在于列表中,这可能会导致程序出现错误。以下是解决这个问题的两种方法。

第一种方法是使用列表推导式。我们可以通过使用列表推导式来创建一个新列表,其中排除了等于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]
x = [i for i in x if i != 0]
print(x)

执行以上代码后,输出结果将不再包含0。

第二种方法是使用`remove()`函数和`while`循环。我们可以使用`remove()`函数将所有等于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]
try:
    while True:
        x.remove(0)
except ValueError:
    pass
print(x)

执行以上代码后,输出结果同样不再包含0。

你可以在以下链接中查看代码的演示:

- [列表推导式方法演示](https://rextester.com/NAVN53491)

- [remove()和while循环方法演示](https://rextester.com/YTXM11780)

以上就是解决在删除后仍然存在于列表中的元素的问题的两种方法。无论你选择哪种方法,都能够有效地从列表中删除指定的元素。

0