python - 以python方式将值从一个数字转移到另一个数字,直至最大值
问题描述
我想在两个变量之间“转移价值”达到最大值。例如,如果我以x=5
, y=3
,开头max=7
,我会以x=7
, y=1
,结尾max=7
。这似乎有一种简短/pythonic的方式来做到这一点。在 python 中最短的方法是什么?
我做了以下事情:
sum = x+y
return_list = []
if sum > max:
return [max, sum-max]
else:
return [sum, 0]
我意识到我可以将最后 4 行更改为return [max, sum-max] if sum > max else return [sum, 0]
,但我认为可能有 1 行解决方案。
解决方案
首先,我从“The Zen of Python”中摘录了以下几行:
Explicit is better than implicit.
Simple is better than complex.
Flat is better than nested.
Readability counts.
是的,您可以将其作为单行来执行,但是您将需要重复一些预计算,或者将其全部包装到一个lambda
或with
块中。我们可以使用元组赋值和三元运算符来使它更加 Pythonic。
def transfer(x, y, max):
sum = x+y
return (max, sum - max) if sum > max else (sum, 0)
如果您删除预计算,它将变为
return (max, x+y - max) if x+y> max else (x+y, 0)
三元组更难阅读,更容易出错。不要去那里。