【发布时间】:2020-09-10 15:20:44
【问题描述】:
我有 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)
如您所见,我复制了第一行代码并将其用于其他列表(lexique)。我所做的是决定打印“三个列表的并集”。
如下:
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
我想知道为什么结果不同,使用“或”然后删除双标应该会得到与第一种方法相同的结果(我相信)。也许有人可以帮我弄清楚原因;我使用第二个来展示我的作品,但之后我重新检查代码并进行改进,我使用“或”;如果两个答案不相同,这是否意味着我的第一个解决方案是错误的,或者第二个解决方案是正确的。
【问题讨论】:
标签: python python-3.x list if-statement tuples