我有一个Python列表,其中包含许多浮点数。我想知道在任意两个整数之间有多少个浮点数。最简单、最有效的方法是什么?
example.py - 如何确定在int(1)和int(8)之间有3个浮点数。
between_List = [1, 1.2, 1.8, 1.45, 8]
我有一个Python列表,其中包含许多浮点数。我想知道在任意两个整数之间有多少个浮点数。最简单、最有效的方法是什么?
example.py - 如何确定在int(1)和int(8)之间有3个浮点数。
between_List = [1, 1.2, 1.8, 1.45, 8]
l = [3.4,4.5,3.2,5.6]
print(sum(3 <= ele <= 4 for ele in l))
2
或者使用numpy:
import numpy as np
l = [3.4, 4.5, 3.2, 5.6]
arr = np.array(l)
print(((3 <= arr) & (arr <= 4)).sum())
2
如果你想检查一个变量是否为浮点数,可以使用issinstance函数:
print(sum(3 <= ele <= 4 and isinstance(ele,float) for ele in l))
如果你想准确地计算出两个整数之间的所有浮点数总数:
l = [1.3, 3, 3.4, 34.5, 3.2, 4, 5.6]
def find_fs(l, i, j):
try:
start, end = l.index(i), l.index(j)
return sum(isinstance(ele, float) for ele in islice(l, start + 1, end))
except IndexError:
return 0
print(find_fs(l,3, 4))
3
and isinstance(ele,float)
吗?还是从索引为3的位置开始计算,在索引为4的位置之间实际出现了多少个浮点数? - Padraic Cunningham正如其他人所发表的,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
l
,而是先剥离所有非浮点数:l2 = [ isinstance(x, float) for x in l]
,然后在对bisect_{left,right}
的调用中使用l2
代替l
。(这当然会破坏O(lg n)的保证。) - chepner类型
检查。
>>> 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