我正在尝试对特定的数据帧组合执行操作,但是我的代码未按照我的想法运行,并且我认为我没有做任何明显的错误。
years_list = []
check1 = 1
check10 = 1
r =30
for p in combinations(test4.index,r):
den = np.mean(p)
num = np.std(p)
cv = num/den
if (den >= 561 and den <= 570 ) :
if(cv>=0.13 or cv <= 0.17 and check1):
check1=0
print("Combination 1 done")
elif(den>=391 and den <= 400):
if(cv>=0.13 or cv < 0.17 and check10):
check10 = 0
print("Combination 10 done")
if(check1+check10==0)
break
在这里,我将check1
和check10
的值更改为0
,以便循环仅在if else条件内进入一次,并且如果同时满足两个条件,则中断循环。
Test4.index
是一个数据框,我认为应该与之无关的信息。
其输出多次打印Combination 10 done
,这是不应该发生的。
我是在做一些非常根本的错误,还是在更深层次的错误中,我无法弄清楚?
编辑:我粘贴了缩进错误,现在正确粘贴了。
答案 0 :(得分:2)
您的括号是错误的。
检查以下代码:
check1 = 0
if(True or True and check1):
print("valid")
else:
print("invalid")
输出:
有效
如果要正确验证条件,请使用:
check1 = 0
if(True or True) and check1:
print("valid")
else:
print("invalid")
输出:
无效
或您的情况:
if(cv>=0.13 or cv < 0.17) and check10:
check10 = 0
print("Combination 10 done")
在python中检查operator precedence,以了解将首先对哪个进行评估
答案 1 :(得分:1)
因为您已经有了答案
我说您可以使用逻辑AND运算符而不是0 + 0来重构最后一个条件代码块。
if(check1 == 0 and check10 == 0)
break
为了获得更大的保证,您可以打印check1并在循环结束时检查10个值以评估每次迭代