我有这个数据列表:
a = [552.5, 560.0, 582.5, 532.5, 575.5, 985.5, 510.0, 125.0]
我想从列表中删除点5
后面的数字.5
的数据。例如:552.5
,582.5
,532.5
,...并获取:
a = [560.0, 510.0, 125.0]
有一种简单的方法吗?
答案 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]