微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有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:
        ....

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。