【发布时间】:2013-10-10 23:45:22
【问题描述】:
这是我遇到问题的任务:
给定 2 个列表,将它们过滤到只有没有共同点的项目。例如。如果内部列表相同,则将它们过滤掉。如果内部列表至少有一个共同点,也将它们过滤掉。
注意:只有一层嵌套。内部列表仅由字符串组成。我有一个可行的解决方案,但它非常混乱。寻求反馈以改进:
首先我过滤掉两个列表中的完全匹配:
l3 = filter(lambda x: x not in l2, l1)
l4 = filter(lambda x: x not in l1, l2)
我最终得到了 2 个不完全相同项目的列表。现在我想遍历内部列表,并摆脱与另一个内部列表共享项目的任何列表。
我在做:
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))
(构建要从列表中删除的单独列表,因为直接在迭代循环中删除会弄乱列表索引并跳过项目。必须有更好的方法,但我不知道。)
但是是的。它完成了工作,但是从元组到集合再到列表再到更多元组……听起来很不合 Python。 :) 很高兴看到任何反馈!
编辑:
示例输入:
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']]
【问题讨论】:
-
你能给出一个示例输入和预期输出吗?
-
向我们展示一些数据:样本输入和期望的输出。
-
@FMc:伟大的思想都一样
-
你去,对不起:)