函数定义错误

时间:2019-07-19 17:21:27

标签: python-3.x function if-statement

我编写了带有很多ELIF和OR语句的函数。代码正在工作,但是结果却不是我想要得到的-与我合作的DF表中的绝对值相同。我在做什么错了?

def some_func(x):
   if x == "aaaa" or "bbb" or "ccc" or "zzz":
    return 1
   elif x == "ddd" or "eee" or "fff" or "ggg":
      return 2
   elif x == "hhh" or "ppp" or "nnn" or "mmm":
      return 3
   else:
      return 0 

df.TABLE_name = df.TABLE_name.apply(some_func).astype('int64')
df ['TABLE_name']。value_counts()

出局:1 38133

2 个答案:

答案 0 :(得分:0)

尽管您的直觉是正确的,但是代码的当前设置方式并未执行您想要的方式。

写作:

if x == "hello" or "world"不会检查x是否等于hello或等于world。它检查x是否等于hello,并且 自动 返回true,因为它实际上是在评估if("hello"),这将总是返回true

由于语法错误,您的代码无法正常工作。考虑进行以下更改:

def some_func(x):
   if x == "aaaa" or x == "bbb" or x == "ccc" or x == "zzz":
    return 1
   elif x == "ddd" or x == "eee" or x == "fff" or x == "ggg":
      return 2
   elif x == "hhh" or x == "ppp" or x == "nnn" or x == "mmm":
      return 3
   else:
      return 0 

答案 1 :(得分:0)

与其在每个O(n) / if语句中进行多个elif比较,不如考虑使用一组用于单个O(1)比较:

def some_func(x):
    if x in {"aaaa", "bbb", "ccc", "zzz"}:
        return 1
    elif x in {"ddd", "eee", "fff", "ggg"}:
        return 2
    elif x in {"hhh", "ppp", "nnn", "mmm"}:
        return 3
    else:
        return 0