我在Python中有一个包含许多浮点数的列表。我想知道任何两个整数之间有多少个浮点数。什么是最简单,最有效的方法?
example.py - 如何确定int(1)和int(8)之间有3个浮点数。
between_List = [1, 1.2, 1.8, 1.45, 8]
答案 0 :(得分:4)
您可以简单地将一个元素的次数加总为3-4:
Size
或使用numpy:
将numpy导入为np
l = [3.4,4.5,3.2,5.6]
print(sum(3 <= ele <= 4 for ele in l))
2
如果你想检查你是否真的有浮动也使用issinstance:
l = [3.4, 4.5, 3.2, 5.6]
arr = np.array(l)
print(((3 <= arr) & (arr <= 4)).sum())
2
如果你真的想要计算两个实际整数之间的浮点总数:
print(sum(3 <= ele <= 4 and isinstance(ele,float) for ele in l))
答案 1 :(得分:3)
正如其他人发布的那样,sum(3 <= x <=4 for x in l)
会在O(n)时间内为任何列表l
提供答案。但是,如果您知道l
已排序,则可以在O(lg n)时间内找到答案。
import bisect
# number of values 3 < x < 4
x = bisect.bisect_right(l, 3)
y = bisect.bisect_left(l, 4)
answer = y - x
# or, number of values 3 <= x <= 4
x = bisect.bisect_left(l, 3)
y = bisect.bisect_right(l, 4)
answer = y - x
答案 2 :(得分:2)
您需要对范围内的元素求和,并检查类型。 需要type
检查,因为范围之间可能有整数(例如:所有浮点数在1,4之间)。
>>> lst = [1, 2.2, 3, 3.3, 3.4, 3.7, 4, 5.5, 6]
>>> st, end = 3, 4
>>> sum(st < x < end and type(x) == float for x in lst)
3
和1,4之间:
>>> st, end = 1, 4
>>> sum(st < x < end and type(x) == float for x in lst)
4