2个elif块

时间:2015-08-22 23:24:52

标签: python optimization control-flow

有没有办法在1个elif块的(false)评估和Python 3.x中的下一个评估之间执行语句? 我希望通过仅运行函数" word_in_special_list"来优化我的程序。如果if块的前2个语句评估为false。 理想情况下,程序看起来像这样:

for word in lis:          
    #Finds word in list
    if word_in_first_list(word):
        score += 1

    elif word_in_second_list(word):
        score -= 1

    #Since the first 2 evaluations return false, the following statement is now run
    a, b = word_in_special_list(word)
    #This returns a Boolean value, and an associated score if it's in the special list
    #It is executed only if the word isn't in the other 2 lists, 
    #and executed before the next elif

    elif a:
        score += b  #Add b to the running score

    else:
        ...other things...
    #end if
#end for

当然,在elif评估中放置一个元组会返回错误。我也无法重构我的if语句,因为该单词更可能位于第一个或第二个列表中,因此这种结构可以节省时间。那么有没有办法在2个elif评估之间运行代码块?

2 个答案:

答案 0 :(得分:9)

你必须制作一个else案例,然后在

中嵌套
for word in lis:          
    if word_in_first_list(word):
        score += 1 
    elif word_in_second_list(word):
        score -= 1
    else:
        a, b = word_in_special_list(word)
        if a:
            score += b  #Add b to the running score
        else:
            ...other things...

答案 1 :(得分:0)

您可以输入continue语句。

for word in lis:          
    #Finds word in list
    if word_in_first_list(word):
        score += 1
        continue

    if word_in_second_list(word):
        score -= 1
        continue

    a, b = word_in_special_list(word)

    if a:
        score += b  #Add b to the running score

    else:
        ...other things...

我认为这会影响您尝试实现的效果。顺便说一句,我不明白为什么你需要函数word_in_first_listif word in first_list有什么问题?