首页 > 解决方案 > 以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 行解决方案。

标签: pythonpython-3.x

解决方案


首先,我从“The Zen of Python”中摘录了以下几行:

Explicit is better than implicit.
Simple is better than complex.
Flat is better than nested.
Readability counts.

是的,您可以将其作为单行来执行,但是您将需要重复一些预计算,或者将其全部包装到一个lambdawith块中。我们可以使用元组赋值和三元运算符来使它更加 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)

三元组更难阅读,更容易出错。不要去那里。


推荐阅读