使用Python从数据列表中删除一些数字

时间:2015-11-25 11:25:26

标签: python

我有这个数据列表:

a = [552.5, 560.0, 582.5, 532.5, 575.5, 985.5, 510.0, 125.0]

我想从列表中删除点5后面的数字.5的数据。例如:552.5582.5532.5,...并获取:

a = [560.0, 510.0, 125.0]

有一种简单的方法吗?

5 个答案:

答案 0 :(得分:2)

使用列表理解仅选择不以.5结尾的数字。

>>> a = [552.5, 560.0, 582.5, 532.5, 575.5, 985.5, 510.0, 125.0]
>>> [i for i in a if not str(i).endswith('.5')]
[560.0, 510.0, 125.0]
>>> 

答案 1 :(得分:1)

选择一个你喜欢的人:

>>> a = [552.5, 560.0, 582.5, 532.5, 575.5, 985.5, 510.0, 125.0]

>>> [i for i in a if not str(i).split('.')[1].startswith('5')]
[560.0, 510.0, 125.0]

>>> [i for i in a if str(i).split('.')[1][0] != '5']
[560.0, 510.0, 125.0]
>>> 

答案 2 :(得分:1)

以非常奇特的方式转换为字符串:)

import math
filter(lambda x: math.modf(x)[0] != 0.5, a)

我认为转换为字符串的其他建议更方便,如果你好奇的话,只是另一种不是真正标准的变体。

答案 3 :(得分:0)

您可以通过针对其int()调用检查每个值来过滤掉它们(int()截断小数点后的值):

a = [552.5, 560.0, 582.5, 532.5, 575.5, 985.5, 510.0, 125.0]
result = [value for value in a if value==int(value)]

答案 4 :(得分:0)

过滤清单:

filter(lambda x: not str(x).endswith('.5'), lst)

或截断它并与数字进行比较(例如,即使对于.0,也会过滤所有非.3333的内容)

import math
filter(lambda x: x == math.trunc(x), lst)

>>> a = [552.5, 560.0, 582.5, 532.5, 575.5, 985.5, 510.0, 125.0]
>>> filter(lambda x: x == math.trunc(x), a)
[560.0, 510.0, 125.0]