问题描述
我想为枚举变量定义多个字符串,并将变量与字符串或枚举类型进行比较。我目前正在执行以下操作:
from enum import Enum
class Ordinal(str,Enum):
norTH = ['north','norTH','n']
SOUTH = ['south','SOUTH','s']
input_by_user_1 = 'n'
input_by_user_2 = Ordinal.norTH
print(input_by_user_1 in Ordinal.norTH) #True
print(input_by_user_2 in Ordinal.norTH) #True
print(input_by_user_1 == Ordinal.norTH) #False
print(input_by_user_2 == Ordinal.norTH) #True
但是,我觉得 in
关键字不太好理解。我更喜欢使用 ==
的选项,但这不起作用,因为我定义了一个列表。有没有更好的方法来做到这一点?
解决方案:
答案是使用 MultiValueEnum 类。然后我可以使用以下代码:
from aenum import MultiValueEnum
class Ordinal(MultiValueEnum):
norTH = 'north','n'
SOUTH = 'south','s'
input_by_user_1 = 'n'
input_by_user_2 = Ordinal.norTH
print(Ordinal(input_by_user_1) == Ordinal.norTH) #True
print(Ordinal(input_by_user_2) == Ordinal.norTH) #True
解决方法
您可以覆盖相等运算符!
library(dplyr)
library(stringr)
wc_sample_conc_df %>%
mutate(across(where(~ any(str_detect(.,fixed("<")))),~ {tmp <- as.numeric(str_remove(.,fixed("<")))
case_when(str_detect(.,fixed("<"))~ tmp/2,TRUE ~ tmp)}))