python-查找列表中特定范围的项目总数

时间:2015-08-14 20:31:44

标签: python

我在Python中有一个包含许多浮点数的列表。我想知道任何两个整数之间有多少个浮点数。什么是最简单,最有效的方法?

example.py - 如何确定int(1)和int(8)之间有3个浮点数。

between_List = [1, 1.2, 1.8, 1.45, 8]

3 个答案:

答案 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