给定两个包含整数范围[x1:x2]和[y1:y2],其中x1≤x2和y1≤y2,测试两个范围是否有任何重叠的最有效方法是什么?
一个简单的实现如下:
bool testOverlap(int x1, int x2, int y1, int y2) {
return (x1 >= y1 && x1 <= y2) ||
(x2 >= y1 && x2 <= y2) ||
(y1 >= x1 && y1 <= x2) ||
(y2 >= x1 && y2 <= x2);
}
Run Code Online (Sandbox Code Playgroud)
但我希望有更有效的方法来计算它.
在最少的操作方面,哪种方法最有效.
def f(a, b, *args):
return (a, b, args)
f(a=3, b=5)
(3, 5, ())
Run Code Online (Sandbox Code Playgroud)
然而:
f(a=3, b=5, *[1,2,3])
TypeError: got multiple values for argument 'b'
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
任何特殊原因?
每次我尝试为默认参数分配一个值时,当还使用 *args 时,都会引发错误:TypeError:“参数有多个值”。
def test(a,b, c=3, *args):
pass
args = [1,2,3]
test(1,2,c=3, *args)
Run Code Online (Sandbox Code Playgroud)
。
TypeError: test() got multiple values for argument 'c'
Run Code Online (Sandbox Code Playgroud)
起初我以为我在这里找到了答案: TypeError: got multiple values for argument 但事实证明该问题中的第一个参数被显式覆盖,所以在我自己的例子中,这与 test(1, 2, a=3, *args) 其中 a 的值为 1 和 3。但这里情况并非如此。
这个问题可能是这个问题的重复“在 python 函数中使用 *args, **kwargs 时获得关键字参数的多个值”,但老实说,该问题中有更多细节超出了我的范围要求,但我真的无法做到。因此,如果这是重复的,那么它会将其他问题的所有内容抽象为实际问题本身。
所有内容的格式都与 Statsmodels 网站上的一样,但不知何故 Spyder 返回了以下内容:
类型错误:ztest_ind() 获得参数“alternative”的多个值
我的相关输入是这样的(数据框工作正常):
ztest = statsmodels.stats.weightstats.CompareMeans.ztest_ind(df1['TOTAL'], df2['TOTAL'], alternative = 'two-sided', usevar = 'unequal', value = 0)
我正在遵循此网站上的格式:https://www.statsmodels.org/devel/ generated/statsmodels.stats.weightstats.CompareMeans.ztest_ind.html
我正在阅读一份解释解包的在线文档(*args和**kwargs)。被以下两个断言搞糊涂了,不知道为什么第二个函数无效。谁能帮助我理解原因?
def f(x, y, z):
return [x, y, z]
t = (3,)
d = {"z": 4}
assert f(2, *t, **d) == [2, 3, 4]
assert f(x=2, *t, **d) == [2, 3, 4] # TypeError: f() got multiple values for argument 'x'
Run Code Online (Sandbox Code Playgroud)
参考 https://caisbalderas.com/blog/python-function-unpacking-args-and-kwargs/
注意:这个问题与TypeError: got multiple values for argument不同,因为它需要额外了解 Python 中参数解包的工作原理。
python ×4
args ×1
arguments ×1
comparison ×1
integer ×1
parameters ×1
performance ×1
python-3.x ×1
range ×1
statsmodels ×1