舍入整数

Gre*_*y D 0 python list

我有15个号码,

[1, 5, 10, 20, 30, 50, 70, 100, 150, 200, 500, 1000, 2000, 5000, 10000]
Run Code Online (Sandbox Code Playgroud)

我有人输入数量和我想要的是它舍入到最低数字.因此,如果有人进入36它将圆到30.

eum*_*iro 7

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()它之前.

  • 重要的是要注意,bisect假定列表已排序,并且对于不是的列表将无法正常工作. (3认同)
  • 如果您正在使用迭代器,为什么不"反转"? (3认同)
  • +1,但你不应该调用变量`l`.(违反pep8) (2认同)

wim*_*wim 7

使用纯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)

注意:不依赖于排序的数字列表.