我有两个列表,我想删除匹配的列表并保持不同。 这是代码:
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)
答案 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