为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在 python 中循环遍历运算符(大于/小于)?

是否可以在 python 中循环遍历运算符(大于/小于)?

ABOUTYOU 2023-02-12 19:03:24
我希望能够遍历关系运算符。我有以下代码工作:TP = df[(df.Truth == 1) & eval(df.age >= cutoff)]我还有几行,其中真值和关系运算符不同,但其他一切都相同。我尝试创建一个列表并使用 eval 函数,但我知道这是错误的,因为我什至无法克服语法错误。truths = [[1,'>='],[0,'>='],[1,'<'],[0,'<']]for truth in truths:     truth_val = truth[0]     operator = truth[1]     TP = df[(df.Truth == truth) & eval(df.age operator cutoff)]我如何着手循环关系运算符而不是让 python 将其作为字符串而是作为实际运算符?先感谢您!!!
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

如果你想要实际的操作员,那么你应该使用operator库:


import operator as op

那么你的代码应该是这样的:


truths = [[1, op.ge], [0, op.ge], [1, op.lt], [0, op.lt]]

for truth in truths:

  truth_val = truth[0]

  operator = truth[1]

  TP = df[(df.Truth == truth) & operator(df.age, cutoff)]

eval这是最安全的解决方案,强烈不鼓励所有基于的解决方案,在运行时评估字符串是一个潜在的安全问题。


查看完整回答
反对 回复 2023-02-12
?
动漫人物

TA贡献1815条经验 获得超10个赞

你能试一下吗


truths = [[1,'>='],[0,'>='],[1,'<'],[0,'<']]

for truth in truths:

     truth_val = truth[0]

     operator = truth[1]

     TP = df[(df.Truth == truth) & eval("df.age"+ operator + cutoff)] # notice cutoff here should be string


查看完整回答
反对 回复 2023-02-12
?
catspeake

TA贡献1111条经验 获得超0个赞

您需要提供eval()一个字符串:


truths = [[1,'>='],[0,'>='],[1,'<'],[0,'<']]

for truth in truths:

     truth_val = truth[0]

     operator = truth[1]

     print(eval(f"{df.age}{operator}{cutoff}"))


查看完整回答
反对 回复 2023-02-12
  • 3 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信