以下是我遇到的问题:
给定两个列表,将它们筛选为只有没有共同点的项。如果内部列表相同,则将其过滤掉。如果内部列表至少有一个共同项,也可以将它们过滤掉。
注意:只有一个层次的嵌套。内部列表仅由字符串组成我有一个可行的解决方案,但非常混乱。寻求改进的反馈:
首先,我筛选出两个列表中的完全匹配项:
l3 = filter(lambda x: x not in l2, l1)
l4 = filter(lambda x: x not in l1, l2)
最后我得到了两个列表,它们没有完全相同的项。现在我想遍历内部列表,并去掉与其他任何内部列表共享项的任何列表。
我正在做:
for i in l3:
for j in i:
for k in l4:
if j in k:
print j, k
removel3.append(tuple(i))
removel4.append(tuple(k))
for i in l4:
for j in i:
for k in l3:
if j in k:
removel3.append(tuple(k))
removel4.append(tuple(i))
for i in list(set(removel3)):
l3.remove(list(i))
for i in list(set(removel4)):
l4.remove(list(i))
(从列表中删除单独的事物列表),因为在迭代循环中直接删除列表索引和跳过项目。必须有更好的方法,但我不知道。)
但是是的。它完成了任务,但是从一个元组到另一个元组再到另一个元组。。。听起来很不自然。)很乐意看到任何反馈!
编辑:
样本输入:
l1 = [['A', 'B', 'C'], ['D', 'E'], ['F', 'G', 'H']]
l2 = [['A', 'B', 'C'], ['D', 'I'], ['K', 'L', 'M']]
经过以上所有的转换,最终得到:
>>> l3
[['F', 'G', 'H']]
>>> l4
[['K', 'L', 'M']]
最佳答案
我想这样的过滤器是你想要的
filter(lambda sublist:not any(set(sublist).intersection(x) for x in list2),list1)
关于python - 比较2个 list list 的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19300096/