该算法的优化

2024-04-25 05:44:32 发布

您现在位置:Python中文网/ 问答频道 /正文

def check_rule(token, training_data, mode):
    if mode == "frag":
        children = training_data["words"]
        remove = list.remove
        def in_child(x):
            for i in token:
                if i not in x:
                    return False
                remove(x, i)
            return True

        for i in children:
            if in_child(i):
                return False
        return True

        # is_present = children.map(in_child)
    elif mode == "wild":

        # is_present = training_data[1].map(methodcaller("__contains__", token))

        for i in training_data[1]:
            if token in i:
                return False
        return True

    elif mode == "prefix":
        # is_present = training_data[1].str.startswith(token)

        token_len = len(token)
        for i in training_data[1]:
            if i[:token_len] == token:
                return False
        return True

        # token_len = len(token)
        # is_present = training_data[1].str[:token_len] == token

        # is_present = training_data[1].map(methodcaller("startswith", token))

    for i in is_present:
        if i:
            return False
    return True

此功能包括:

token:字符串
training_data:一个有两列的pandas数据帧,其中有IDvendor name
mode:可以是prefixwildfrag中的任意一个。你知道吗

注释部分是我在评测之后尝试的优化。但是,这仍然需要很多时间。能否进一步优化?你知道吗


Tags: intokenfalsetruefordatalenreturn