在两个列表中找到不同的单词

时间:2016-10-18 17:21:09

标签: python

我有两个列表,我想删除匹配的列表并保持不同。 这是代码:

def check_synonym(text):
     tokens=regexp_tokenize(text, r'[،؟!.؛\s+]\s*', gaps=True)
     based_text= ' '.join(cursor.execute('SELECT request FROM Male_Conversation_Engine WHERE request REGEXP?',[tokens[0]]).fetchone())
     based_tokens=regexp_tokenize(str(based_text), r'[،؟!.؛\s+]\s*', gaps=True)
    for w1 in based_tokens:
       for w2 in tokens:
           if w1 == w2:
              based_tokens.remove(w1),tokens.remove(w2)      
return list

如果两个列表是“阿拉伯语”:

 tokens = ['هذا','الجهاز','الجميل']
 based_tokens = ['هذا','الجهاز','جيد']

输出应为:

 tokens = ['الجميل']
 based_tokens = ['جيد']

实际输出:

 tokens = ['الجهاز','جميل']
 based_tokens = ['الجهاز','جيد']

该方只删除第一个元素'هذا'并返回列表的其余部分。

(使用python3)

2 个答案:

答案 0 :(得分:0)

您可以使用集合和列表推导的组合

s1 = set(tokens)
s2 = set(based_tokens)

tokens = [t for t in tokens if t not in s2]
based_tokes = [t for t in based_tokens if t not in s1]

我使用集合的唯一原因是因为对于大型列表,检查集合的成员资格要快得多。

答案 1 :(得分:0)

    set1=set(tokens)
    set2=set(based_tokens)

    tokens = set1-set2 
    based_tokens = set2-set1