Python比较单词并删除两个列表中的重复单词



我有以下列表:

list_1_test = [['hi','there','how'],['we','are','one']]
list_2_test = [['hi','you','how'],['we','not','one']]

我希望比较列表中的单词,并得到以下输出:

list_3_test = [['there','you'],['are','not']]

我知道如何在一个简单的列表中做到这一点,例如:

list_1_test = ['hi','there','how']
list_2_test = ['hi','you','how']
list_3_test=[]
for i in list_1_test:
if i not in list_2_test:
list_3_test.append(i)
for i in list_2_test:
if i not in list_1_test:
list_3_test.append(i)   

结果是

['there', 'you']

但当谈到列表时,我的大脑就炸了。命令很重要。非常感谢您的帮助。

如果顺序无关紧要,可以使用集合操作+列表理解:

out = [list(set(l1).union(l2) - set(l1).intersection(l2)) for l1, l2 in zip(list_1_test, list_2_test)]

输出:

[['you', 'there'], ['are', 'not']]

如果订单很重要,您可以使用dict.fromkeys:

out = []
for l1, l2 in zip(list_1_test, list_2_test):
one = dict.fromkeys(l1).keys()
two = dict.fromkeys(l2).keys()
out.append(list(one - two) + list(two - one))

输出:

[['there', 'you'], ['are', 'not']]

您可以使用集合和symmetric_difference方法(^(:

list3 = []
for l1, l2 in zip(list_1_test, list_2_test):
sym_dif = set(l1)^set(l2)
list3.append(list(sym_dif))

列表理解格式中的先前代码:

list3 = [set(l1)^set(l2) for l1, l2 in zip(list_1_test, list_2_test)]
all_list = []
for i in list_1_test:    
all_list.append(' '.join(i))
for i in list_2_test:
all_list.append(' '.join(i))
list_str = ' '.join(all_list)    
result = []
for i in list_str.split():
if list_str.count(i) == 1:
result.append(i)

print(result)

最新更新