避免通过使用“或”运算符来复制代码行不会产生与复制行时相同的结果

问题描述

我有3个不同单词的列表。一个单词可以在多个列表中。我也有一个句子清单。我所做的是:我检查句子中特定索引处的一个单词是否出现在上述单词列表之一中,如果“是”,则附加该句子。我用两种方法。

第一种方法是:

我为其中一个单词列表编写代码,然后重复它,但只更改列表名称和附加句子的变量

if (pattern_list_tup[pat][2]):
                    if (span[value_of_attribute[pat]] in lexique_1[pattern_list_tup[pat][1]]):
                        if sent not in sentence_extract_lexique_1:
                             sentence_extract_lexique_1.append(sent)                            
                    else:
                        sentence_not_extract_lexique_1.append(sent)

if (pattern_list_tup[pat][2]):
                    if (span[value_of_attribute[pat]] in lexique_2[pattern_list_tup[pat][1]]):
                        if sent not in sentence_extract_lexique_1:
                             sentence_extract_lexique_2.append(sent)                            
                    else:
                        sentence_not_extract_lexique_2.append(sent)

if (pattern_list_tup[pat][2]):
                    if (span[value_of_attribute[pat]] in lexique_3[pattern_list_tup[pat][1]]):
                        if sent not in sentence_extract_lexique_1:
                             sentence_extract_lexique_3.append(sent)                            
                    else:
                        sentence_not_extract_lexique_3.append(sent)

如您所见,我复制了第一行代码,并将其用于其他列表(词法)。我要做的是决定打印“三个列表的联合”。

如下:

Lists = [sentence_extract_lexique_1,sentence_extract_lexique_2,sentence_extract_lexique_3]
    
    all_union = set.union(*map(set,Lists))
    print("Union des 4 dictionnaires pour phrases extraites",len(all_union),"\n")

# Union des 4 dictionnaires pour phrases extraites  1003     

然后,为了不重复第一行,我想出了另一种方法:我使用运算符“或”,如下所示:

 if (pattern_list_tup[pat][2]):
                    if (span[value_of_attribute[pat]] in lexique_1[pattern_list_tup[pat][1]] or lexique_2[pattern_list_tup[pat][1]] or lexique_3[pattern_list_tup[pat][1]] :
                        #print(span[value_of_attribute[pat]])
                        if sent not in sentence:
                            sentence.append(sent)                     
                    else:
                        sentence_not.append(sent)

在这行代码之后,我决定打印结果,但是在打印之前,我使用“ set”来抑制重复。

print(" phrases totales ",len(sentence))

# phrases totale 1996

sentence = set(sentence)
print("Total après suppression ",len(sentence))

Total après suppression 1556

我想知道为什么结果不同,使用“或”然后删除双义词应该得到与第一种方法相同的结果(我相信)。也许有人可以帮助我找出原因;我使用第二个来展示我的作品,但是之后我重新检查代码并进行改进,我使用“或”;如果两个答案都不相同,是否表示我的第一个解决方案是错误的,或者第二个解决方案是正确的?

解决方法

您不能以这种方式使用“或”:

if (span[value_of_attribute[pat]] in lexique_1[pattern_list_tup[pat][1]] or lexique_2[pattern_list_tup[pat][1]] or lexique_3[pattern_list_tup[pat][1]] :

您要么要做

if a in b or a in c....

或者您可以

for _list in [b,c]:
    if a in _list:
        ....

第三种方法是将所有这些代码包装在一个函数中,并使用这三个列表中的每一个调用该函数。

顺便说一句,杜邦翻译成英文的副本。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...