当前位置: 首页 > news >正文

python如何取整数范围_python - 如何将整数钳位到某个范围?

python - 如何将整数钳位到某个范围?

我有以下代码:

new_index = index + offset

if new_index < 0:

new_index = 0

if new_index >= len(mylist):

new_index = len(mylist) - 1

return mylist[new_index]

基本上,我计算一个新索引并使用它来从列表中查找一些元素。 为了确保索引在列表的边界内,我需要将这些2 max()语句写成4行。 那是相当冗长,有点难看......我敢说,这是非常不科幻的。

还有其他更简单,更紧凑的解决方案吗? (和更多pythonic)

是的,我知道我可以在一行中使用max(),但它不可读:

new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index

我也知道我可以将max()和min()连在一起。 它更紧凑,但我觉得它有点模糊,如果我输错了就更难找到错误。 换句话说,我觉得这很简单。

new_index = max(0, min(new_index, len(mylist)-1))

9个解决方案

90 votes

实际上,这很清楚。 很多人很快就学会了。 您可以使用评论来帮助他们。

new_index = max(0, min(new_index, len(mylist)-1))

S.Lott answered 2019-05-16T02:01:34Z

67 votes

sorted((minval, value, maxval))[1]

例如:

>>> minval=3

>>> maxval=7

>>> for value in range(10):

... print sorted((minval, value, maxval))[1]

...

3

3

3

3

4

5

6

7

7

7

John La Rooy answered 2019-05-16T02:01:54Z

35 votes

请参阅numpy.clip:

index = numpy.clip(index, 0, len(my_list) - 1)

Neil G answered 2019-05-16T02:02:19Z

33 votes

这里有很多有趣的答案,除了......哪一个更快?

import numpy

np_clip = numpy.clip

mm_clip = lambda x, l, u: max(l, min(u, x))

s_clip = lambda x, l, u: sorted((x, l, u))[1]

py_clip = lambda x, l, u: l if x < l else u if x > u else x

>>> import random

>>> rrange = random.randrange

>>> %timeit mm_clip(rrange(100), 10, 90)

1000000 loops, best of 3: 1.02 µs per loop

>>> %timeit s_clip(rrange(100), 10, 90)

1000000 loops, best of 3: 1.21 µs per loop

>>> %timeit np_clip(rrange(100), 10, 90)

100000 loops, best of 3: 6.12 µs per loop

>>> %timeit py_clip(rrange(100), 10, 90)

1000000 loops, best of 3: 783 ns per loop

paxdiablo有它!,使用普通的ol'python。 numpy版本也许并不奇怪,是最慢的版本。 可能是因为它正在寻找数组,其他版本只是在命令它们的参数。

SingleNegationElimination answered 2019-05-16T02:02:53Z

13 votes

链接max()和min()是我见过的正常习语。 如果您发现难以阅读,请编写一个辅助函数来封装操作:

def clamp(minimum, x, maximum):

return max(minimum, min(x, maximum))

Laurence Gonsalves answered 2019-05-16T02:03:18Z

13 votes

无论我心爱的可读Python语言发生了什么?:-)

说真的,让它成为一个功能:

def addInRange(val, add, minval, maxval):

newval = val + add

if newval < minval: return minval

if newval > maxval: return maxval

return newval

然后用以下内容调用它:

val = addInRange(val, 7, 0, 42)

或者更简单,更灵活的解决方案,您可以自己进行计算:

def restrict(val, minval, maxval):

if val < minval: return minval

if val > maxval: return maxval

return val

x = restrict(x+10, 0, 42)

如果你愿意,你甚至可以使min / max成为一个列表,使它看起来更“数学上纯粹”:

x = restrict(val+7, [0, 42])

paxdiablo answered 2019-05-16T02:04:11Z

5 votes

如果您的代码看起来太笨重,那么函数可能会有所帮助:

def clamp(minvalue, value, maxvalue):

return max(minvalue, min(value, maxvalue))

new_index = clamp(0, new_index, len(mylist)-1)

Greg Hewgill answered 2019-05-16T02:04:37Z

4 votes

对我来说这个似乎更加pythonic:

>>> def clip(val, min_, max_):

... return min_ if val < min_ else max_ if val > max_ else val

一些测试:

>>> clip(5, 2, 7)

5

>>> clip(1, 2, 7)

2

>>> clip(8, 2, 7)

7

Jens answered 2019-05-16T02:05:10Z

1 votes

避免为这些小任务编写函数,除非你经常应用它们,因为它会使代码混乱。

对于个人价值观:

min(clamp_max, max(clamp_min, value))

对于值列表:

map(lambda x: min(clamp_max, max(clamp_min, x)), values)

Jetze Schaafsma answered 2019-05-16T02:05:51Z

相关文章:

  • mvd没什么每次参数双都多一个逗号_求和函数Sum都不会使用,那就真的Out了
  • 用hundred造句子_神奇!英国老师用这种方法,让孩子写出地道英语作文,佳句频出......
  • 记录登录远程页面的地址_5分钟,教你做远程办公最靓的仔
  • python为什么适合小学生_如何看待小学生开始学Python?
  • python web flask 插件_python Web flask 视图内容和模板实现代码
  • asp python 混合_​用 Python 让 Excel 表格合并飞起来
  • python abc模块_Python
  • 线程自动退出_Java开发课程(十八)——多线程 2、多线程编程
  • 图像条纹检测 python_衍射时差法超声波检测(TOFD)告诉你焊接缺陷到底是什么样的!...
  • python一元二次方程表达式_Python实现求解一元二次方程的方法示例
  • python并发和并行_python并发编程(并发与并行,同步和异步,阻塞与非阻塞)
  • oracle rds 运维服务_我应该为无服务器应用程序选择哪个数据库?
  • cmd传入命令行打开程序_CMD命令行中以管理员权限启动应用程序实现方法
  • gb和gib的区别_GB和GiB的区别
  • p6与project哪个软件好_多功能记事本软件哪个好?
  • __proto__ 和 prototype的关系
  • Asm.js的简单介绍
  • es6(二):字符串的扩展
  • Java 23种设计模式 之单例模式 7种实现方式
  • java正则表式的使用
  • MySQL数据库运维之数据恢复
  • React 快速上手 - 07 前端路由 react-router
  • Sass 快速入门教程
  • SOFAMosn配置模型
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 技术:超级实用的电脑小技巧
  • 聊聊directory traversal attack
  • 无服务器化是企业 IT 架构的未来吗?
  • 新版博客前端前瞻
  • C# - 为值类型重定义相等性
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • PostgreSQL之连接数修改
  • 选择阿里云数据库HBase版十大理由
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • (1)(1.13) SiK无线电高级配置(六)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (十八)三元表达式和列表解析
  • (转)Google的Objective-C编码规范
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core Web APi类库如何内嵌运行?
  • .NET 设计一套高性能的弱事件机制
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net和php怎么连接,php和apache之间如何连接
  • .NET面试题(二)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ C++ ] STL---string类的使用指南
  • [20171113]修改表结构删除列相关问题4.txt
  • [AutoSar NVM] 存储架构
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [Bugku]密码???[writeup]