快速找到适用于所有情况的2个列表之间的区别

时间:2015-01-06 02:37:54

标签: python list loops set

我需要找到两个列表之间的区别,以解决我想要解决的问题。

例如:if:

list1 = ["Johny", "Lisa", "Madison", "Kirean"]
list2 = ["Lisa", "Madison", "Kirean"]
print difference(list1, list2)
#Should return ["Johnny"]

我尝试了两种不同的方法。

一个循环遍历列表并检查类似元素并删除类似元素。编译一半的案件花了太长时间。

另一种方法是使用减法集。但是这种方法在某些情况下没有返回任何内容。(如果这些情况在时限内,第一种解决方案就解决了这些问题。)

还有其他方法可以立于不败之地吗?

这是问题的链接:http://www.dmoj.ca/problem/coci14c2p2

这是我的代码:

a = []
b = []
n = input()
for i in range(n):
    a.append(raw_input())
for i in range(n-1):
    b.append(raw_input())

print list(set(a) ^ set(b))[0]

4 个答案:

答案 0 :(得分:2)

您可以使用set和symmetric_difference(),即查找恰好位于其中一个集合中的元素:

list1 = ["Johny", "Lisa", "Madison", "Kirean"]
list2 = ["Lisa", "Madison", "Kirean"]
list(set(list1).symmetric_difference(list2))
# Output: ['Johny']

请注意,如果使用difference(),则在交换list1list2时输出将为空。

答案 1 :(得分:2)

如@ YS-L所述,set.symmetric_difference是您所需要的,而不是set.difference。此外,您可以改为使用运算符^

In [108]: set(list2) ^ set(list1)
Out[108]: {'Johny'}

In [109]: set(list1).symmetric_difference(list2)
Out[109]: {'Johny'}

答案 2 :(得分:1)

你需要使用set:

>>> list1 = ["Johny", "Lisa", "Madison", "Kirean"]
>>> list2 = ["Lisa", "Madison", "Kirean"]
>>> list(set(list1) - set(list2))
['Johny']

答案 3 :(得分:0)

怎么样:

set1 = set(list1)
set2 = set(list2)

result = list((set1 | set2) - (set1 & set2))