python怎么用for循环找出最大值_从“for in”循环中获取最小值和最大值

如果您只想遍历iterable一次(假设这是一个昂贵的操作,实际上这是您应该这样做的唯一原因,而不是分别执行max或{},但也就是说,下面是分别调用这两个操作的性能改进,请参见下面的数字):def max_min(iterable, key=None):

'''

returns a tuple of the max, min of iterable, optional function key

tuple items are None if iterable is of length 0

'''

it = iter(iterable)

_max = _min = next(it, None)

if key is None:

for i in it:

if i > _max:

_max = i

elif i < _min:

_min = i

else:

_max_key = _min_key = key(_max)

for i in it:

key_i = key(i)

if key_i > _max_key:

_max, _max_key = i, key_i

elif key_i < _min_key:

_min, _min_key = i, key_i

return _max, _min

用法:

^{2}$

性能检查:>>> timeit.timeit('max(range(1000)), min(range(1000))', setup=setup)

70.95577674100059

>>> timeit.timeit('max_min(range(1000))', setup=setup)

65.00369232000958

这比分别调用内置函数max和{}(不使用lambda)提高了9%。带着一个lambda:>>> timeit.timeit('max(range(1000), key=lambda x: -x),min(range(1000), key=lambda x: -x)', setup=setup)

294.17539755300095

>>> timeit.timeit('max_min(range(1000), key=lambda x: -x)', setup=setup)

208.95339999899443

这比用lambdas分别调用它们的性能提高了40%以上。在

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值