我有15个号码,
[1, 5, 10, 20, 30, 50, 70, 100, 150, 200, 500, 1000, 2000, 5000, 10000]
Run Code Online (Sandbox Code Playgroud)
我有人输入数量和我想要的是它舍入到最低数字.因此,如果有人进入36它将圆到30.
bisect 将在O(log N)中执行:
>>> import bisect
>>> L = [1, 5, 10, 20, 30, 50, 70, 100, 150, 200, 500, 1000, 2000, 5000, 10000]
>>> L[bisect.bisect(L, 36) - 1]
30
Run Code Online (Sandbox Code Playgroud)
或者使用纯python和O(N):
>>> L = [1, 5, 10, 20, 30, 50, 70, 100, 150, 200, 500, 1000, 2000, 5000, 10000]
>>> next(elem for elem in reversed(L) if elem <= 36)
30
Run Code Online (Sandbox Code Playgroud)
假设L列表已排序.否则L.sort()它之前.
使用纯python:
>>> numbers = [1, 5, 10, 20, 30, 50, 70, 100, 150, 200, 500, 1000, 2000, 5000, 10000]
>>> x = 36
>>> max(n for n in numbers if n <= x)
30
Run Code Online (Sandbox Code Playgroud)
注意:不依赖于排序的数字列表.